绑定标记扩展

将属性值延迟为数据绑定值,创建中间表达式对象并在运行时解释应用于元素及其绑定的数据上下文。

绑定表达式用法

<object property="{Binding}" .../>  
-or-  
<object property="{Binding  bindProp1=value1[, bindPropN=valueN]*}" ...  
/>  
-or-  
<object property="{Binding path}" .../>  
-or  
<object property="{Binding path[, bindPropN=valueN]*}" .../>  

语法注释

在这些语法中,[]* 不是文本。 它们是表示法的一部分,表示可以使用零个或多个 bindProp=value 对,它们与前面的 bindProp=value 对之间用 , 分隔符分隔。

“可以使用绑定扩展设置的绑定属性”部分中列出的任何属性都可以使用 Binding 对象元素的特性来设置。 但是,这并不是 Binding 真正的标记扩展用法,而只是对设置 CLR Binding 类属性的特性的常规 XAML 处理。 换句话说,<BindingbindProp1="value1"[bindPropN="valueN"]*/>Binding 对象元素用法(而不是 Binding 表达式用法)的特性的等效语法。 若要了解 Binding 的特定属性的 XAML 特性用法,请参阅 .NET Framework 类库中 Binding 的相关属性的“XAML 特性用法”部分。

XAML 值

说明
bindProp1, bindPropN 要设置的 BindingBindingBase 属性的名称。 并非所有 Binding 属性都可以使用 Binding 扩展来设置,某些属性只能通过使用进一步嵌套的标记扩展在 Binding 表达式中设置。 请参阅“可以使用绑定扩展设置的绑定属性”部分。
value1, valueN 要将属性设置为的值。 特性值的处理最终特定于所设置的特定 Binding 属性的类型和逻辑。
path 用于设置隐式 Binding.Path 属性的路径字符串。 另请参阅 PropertyPath XAML 语法

未限定的 {Binding}

“绑定表达式用法”中所示的 {Binding} 用法创建了一个具有默认值的 Binding 对象,其中包括 Binding.Path 的初始值 null。 该用法在许多情况下仍然有用,因为创建的 Binding 可能依赖于在运行时数据上下文中设置的关键数据绑定属性(如 Binding.PathBinding.Source)。 有关数据上下文概念的详细信息,请参阅数据绑定

隐式路径

Binding 标记扩展使用 Binding.Path 作为概念上的“默认属性”,其中 Path= 不需要出现在表达式中。 如果指定具有隐式路径的 Binding 表达式,则隐式路径必须首先出现在表达式中,即,在 Binding 属性由名称指定的任何其他 bindProp=value 对之前。 例如:{Binding PathString},其中 PathString 是一个字符串,其计算结果为标记扩展用法创建的 Binding 中的 Binding.Path 值。 你可以在逗号分隔符后追加包含其他命名属性的隐式路径,例如 {Binding LastName, Mode=TwoWay}

可以使用绑定扩展设置的绑定属性

本主题中显示的语法使用泛型 bindProp=value 近似值,因为 BindingBaseBinding 的许多读/写属性可以通过 Binding 标记扩展/表达式语法进行设置。 它们可以按任意顺序设置,隐式 Binding.Path 除外。 (你可以选择显式指定 Path=,在这种情况下,它可以按任意顺序设置)。 基本上,你可以使用以逗号分隔的 bindProp=value 对来设置以下列表中的零个或多个属性。

其中一些属性值所需的对象类型不支持从 XAML 中的文本语法进行本机类型转换,因此需要标记扩展才能设置为特性值。 有关详细信息,请查看每个属性的 .NET Framework 类库中的“XAML 特性用法”部分;用于 XAML 特性语法的字符串(无论是否有进一步的标记扩展用法)与在 Binding 表达式中指定的值基本相同,但不会将 Binding 表达式中的每个 bindProp=value 括在引号中。

以下是无法使用 Binding 标记扩展/{Binding} 表达式格式设置的 Binding 属性。

备注

重要

在依赖属性优先级方面,Binding 表达式等效于本地设置的值。 如果为先前使用 Binding 表达式的属性设置本地值,则会完全删除 Binding。 有关详细信息,请参阅依赖属性值优先级

本主题不包括从基本层面描述数据绑定。 请参阅数据绑定概述

注意

MultiBindingPriorityBinding 不支持 XAML 扩展语法。 请改用属性元素。 请参阅 MultiBindingPriorityBinding 的参考主题。

XAML 的布尔值不区分大小写。 例如,可指定 {Binding NotifyOnValidationError=true}{Binding NotifyOnValidationError=True}

涉及数据验证的绑定通常由显式 Binding 元素指定,而不是指定为 {Binding ...} 表达式,而且在表达式中设置 ValidatesOnDataErrorsValidatesOnExceptions 的做法并不常见。 这是因为无法使用表达式格式轻松设置配套属性 ValidationRules。 有关详细信息,请参阅实现绑定验证

Binding 是标记扩展。 当要求转义特性值应为非文本值或非处理程序名称时,通常会实现标记扩展,相对于在某些类型或属性上特性化的类型转换器而言,此要求更具有全局性。 XAML 中的所有标记扩展在其特性语法中均使用 {} 字符,正是依据这一约定,XAML 处理器认定标记扩展必须处理字符串内容。 有关详细信息,请参阅标记扩展和 WPF XAML

Binding 是一种非典型标记扩展,因为为 WPF 的 XAML 实现实现扩展功能的 Binding 类还实现了与 XAML 无关的其他几个方法和属性。 其他成员旨在使 Binding 成为一个更通用且独立的类,除了用作 XAML 标记扩展外,还能解决许多数据绑定的情况。

另请参阅