{Binding} 标记扩展

注释

新的绑定机制适用于 Windows 10,该机制针对性能和开发人员工作效率进行优化。 请参阅 {x:Bind} 标记扩展

注释

有关在应用中使用 {Binding} 进行数据绑定的常规信息(以及 {x:Bind}{Binding}之间的全面比较),请参阅 深入了解数据绑定

{Binding} 标记扩展用于将控件上的属性数据绑定到来自数据源(如代码)的值。 {Binding} 标记扩展在 XAML 加载时转换为 Binding 类的实例。 此绑定对象从数据源上的属性获取值,并将其推送到控件上的属性。 绑定对象可以选择性地配置为观察数据源属性值的变化,并根据这些更改自行更新。 它还可以被选择性地配置为将控件值的更改推送回源属性。 作为数据绑定目标的属性必须是依赖属性。 有关详细信息,请参阅 依赖项属性概述

{Binding} 的依赖属性优先级与本地值相同,在命令性代码中设置本地值会删除标记中设置的任何 {Binding} 的效果。

XAML 属性用法

<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
术语 DESCRIPTION
属性路径 一个字符串,指定绑定的属性路径。 有关详细信息,请参阅下面的 属性路径 部分。
绑定属性 属性名=[,属性名=]*
通过名称/值对语法指定的一个或多个绑定属性。
属性名称 用于在 Binding 对象上设置的属性的字符串名称。 例如,“转换器”。
价值 用于设置该属性的值。 参数的语法取决于可以使用 {Binding} 节设置的 Binding 类 属性的属性。

属性路径

路径 描述要绑定到的属性(源属性)。 路径是一个位置参数,这意味着可以显式使用参数名称({Binding Path=EmployeeID}),也可以将其指定为第一个未命名参数({Binding EmployeeID})。

Path 的类型是一个属性路径,它是一个字符串,其计算结果为自定义类型或框架类型的属性或子属性。 类型可以是 DependencyObject,但不需要是 DependencyObject。 属性路径中的步骤由点(.)分隔,可以包含多个分隔符来遍历连续子属性。 无论用于实现绑定到的对象的编程语言如何,都使用点分隔符。

例如,若要将 UI 绑定到员工对象的名字属性,属性路径可能是“Employee.FirstName”。 如果要将项控件绑定到包含员工依赖项的属性,则属性路径可能是“Employee.Dependents”,而项目控件的项模板将负责在“依赖项”中显示项。

如果数据源是集合,则属性路径可以通过集合中的位置或索引指定项。 例如,“Teams[0].Players”,其中的文本“[]”用来括住表示集合中第一项的“0”。

使用 ElementName 绑定到现有 DependencyObject时,可以将附加属性用作属性路径的一部分。 若要消除附加属性的歧义,以便附加属性名称中的中间点不被视为属性路径中的一个步骤,请将括号放在所有者限定的附加属性名称周围:例如, (AutomationProperties.Name).

属性路径中间对象作为 PropertyPath 对象存储在运行时表示形式中,但大多数方案不需要在代码中与 PropertyPath 对象交互。 通常可以使用 XAML 指定所需的绑定信息。

有关属性路径的字符串语法、动画特征区域中的属性路径以及构造 PropertyPath 对象的详细信息,请参阅 Property-path 语法

可以使用 {Binding} 设置的 Binding 类的属性

{Binding} 通过 bindingProperties 占位符语法来说明,因为在标记扩展中可以设置的 绑定 具有多个可读写属性。 可以以任意顺序使用逗号分隔的 propName= 对来设置属性。 某些属性所需的类型缺乏类型转换,因此这些属性需要在 {Binding}中嵌套其自身的标记扩展。

资产 DESCRIPTION
路径 请参阅上面的 属性路径 部分。
转换器 指定绑定引擎调用的转换器对象。 转换器可以在标记中使用 {StaticResource} 标记扩展来设置, 从资源字典引用到该对象。
ConverterLanguage 指定要由转换器使用的文化。 (如果要设置 转换器。)文化设置是基于标准的标识符。 更多信息,请参阅 ConverterLanguage
转换器参数 指定可在转换器逻辑中使用的转换器参数。 (如果要设置 转换器)大多数转换器使用简便的逻辑,根据传递的值获取所有所需的信息进行转换,并且不需要 ConverterParameter 参数值。 ConverterParameter 参数用于更复杂的转换器实现,这些实现具有条件逻辑,并依赖于从 ConverterParameter中传递的内容。 可以编写使用字符串以外的值的转换器,但这种情况并不常见,有关详细信息,请参阅 ConverterParameter 中的备注。
ElementName 通过引用同一 XAML 构造中具有 Name 属性或 x:Name 属性的另一个元素来指定数据源。 这通常用于共享相关值,或使用一个 UI 元素的子属性为另一个元素提供特定值,例如在 XAML 控件模板中。
后备值 指定要在无法解析源或路径时显示的值。
模式 将绑定模式指定为以下值之一:“OneTime”、“OneWay”或“TwoWay”。 它们对应于 BindingMode 枚举的常量名称。 默认值为“OneWay”。 请注意,这不同于 {x:Bind} 的默认值,即“OneTime”。
相对源 通过描述绑定源相对于绑定目标位置的位置来指定数据源。 这最常用于 XAML 控件模板中的绑定。 设置 {RelativeSource} 标记扩展。
源头 指定对象数据源。 在 绑定 标记扩展中,Source 属性需要对象引用,例如 {StaticResource} 标记扩展 引用。 如果未指定此属性,则代理数据上下文指定源。 通常情况下,不要在单个绑定中指定源值,而是依赖于多个绑定所共享的 DataContext。 有关详细信息,请参阅 DataContext深入数据绑定
目标空值 指定要在源值解析完成但显式为 null时显示的值。
更新源触发器 指定绑定源更新的时间安排。 如果未指定,则默认值为

注意 如果要将标记从 {x:Bind} 转换为 {Binding},请注意 Mode 属性的默认值差异。

转换器ConverterLanguageConverterLanguage 都与将值或类型从绑定源转换为与绑定目标属性兼容的类型或值的方案相关。 有关详细信息和示例,请参阅 深入数据绑定中的“数据转换”部分。

注释

从 Windows 10 版本 1607 开始,XAML 框架提供内置布尔值到可见性转换器。 转换器将 true 映射到 Visible 枚举值,false 映射到 Collapsed,以便无需创建转换器即可将 Visibility 属性绑定到布尔值。 若要使用内置转换器,应用的最低目标 SDK 版本必须为 14393 或更高版本。 当你的应用面向 Windows 10 的早期版本时,你不能使用它。 有关目标版本的详细信息,请参阅 版本自适应代码

SourceRelativeSourceElementName 指定绑定源,因此它们互斥。

提示 如果需要为值指定单个大括号,例如在 PathConverterParameter中,请在其前面加上反斜杠:\{。 或者,将包含需要转义的大括号的整个字符串用次级引号括起来,例如 ConverterParameter='{Mix}'

例子

<!-- binding a UI element to a view model -->    
<Page ... >
    <Page.DataContext>
        <local:BookstoreViewModel/>
    </Page.DataContext>

    <GridView ItemsSource="{Binding BookSkus}" SelectedItem="{Binding SelectedBookSku, Mode=TwoWay}" ... />
</Page>
<!-- binding a UI element to another UI element -->
<Page ... >
    <Page.Resources>
        <local:S2Formatter x:Key="GradeConverter"/>
    </Page.Resources>

    <Slider x:Name="sliderValueConverter" ... />
    <TextBox Text="{Binding Path=Value, ElementName=sliderValueConverter,
        Mode=OneWay,
        Converter={StaticResource GradeConverter}}"/>
</Page>

第二个示例设置四个不同的 绑定 属性: ElementNamePathModeConverter。 在本例中,路径 被明确命名为 Binding 属性。 Path 的计算结果为数据绑定源,该源是同一运行时对象树中的另一个对象,即名为 sliderValueConverter

请注意 转换器 属性值使用了另一个标记扩展,即 {StaticResource} 标记扩展,所以这里有两个嵌套的标记扩展用法。 首先评估内部部分,以便一旦获得资源,绑定就能使用一个实际的 IValueConverter(这是由资源中的 local:S2Formatter 元素实例化的自定义类)。

工具支持

在 Microsoft Visual Studio 的 XAML 标记编辑器中创作 {Binding} 时,Microsoft IntelliSense 会显示数据上下文的属性。 当您键入“{Binding”后,适用于 路径 的数据上下文属性会显示在下拉列表中。 IntelliSense 还帮助处理 绑定的其他属性。 为了实现这一点,您必须在标记页中设置数据上下文或设计时数据上下文。 转到定义(F12)同样适用于 {Binding}。 或者,可以使用数据绑定对话框。