绑定标记扩展
将属性值延迟为数据绑定值,创建中间表达式对象并在运行时解释应用于元素及其绑定的数据上下文。
绑定表达式用法
<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 处理。 换句话说,<Binding
bindProp1="
value1"[
bindPropN="
valueN"]*/>
是 Binding 对象元素用法(而不是 Binding
表达式用法)的特性的等效语法。 若要了解 Binding 的特定属性的 XAML 特性用法,请参阅 .NET Framework 类库中 Binding 的相关属性的“XAML 特性用法”部分。
XAML 值
值 | 说明 |
---|---|
bindProp1, bindPropN |
要设置的 Binding 或 BindingBase 属性的名称。 并非所有 Binding 属性都可以使用 Binding 扩展来设置,某些属性只能通过使用进一步嵌套的标记扩展在 Binding 表达式中设置。 请参阅“可以使用绑定扩展设置的绑定属性”部分。 |
value1, valueN |
要将属性设置为的值。 特性值的处理最终特定于所设置的特定 Binding 属性的类型和逻辑。 |
path |
用于设置隐式 Binding.Path 属性的路径字符串。 另请参阅 PropertyPath XAML 语法。 |
未限定的 {Binding}
“绑定表达式用法”中所示的 {Binding}
用法创建了一个具有默认值的 Binding 对象,其中包括 Binding.Path 的初始值 null
。 该用法在许多情况下仍然有用,因为创建的 Binding 可能依赖于在运行时数据上下文中设置的关键数据绑定属性(如 Binding.Path 和 Binding.Source)。 有关数据上下文概念的详细信息,请参阅数据绑定。
隐式路径
Binding
标记扩展使用 Binding.Path 作为概念上的“默认属性”,其中 Path=
不需要出现在表达式中。 如果指定具有隐式路径的 Binding
表达式,则隐式路径必须首先出现在表达式中,即,在 bindProp
属性由名称指定的任何其他 =value
Binding 对之前。 例如:{Binding PathString}
,其中 PathString
是一个字符串,其计算结果为标记扩展用法创建的 Binding.Path 中的 Binding 值。 你可以在逗号分隔符后追加包含其他命名属性的隐式路径,例如 {Binding LastName, Mode=TwoWay}
。
可以使用绑定扩展设置的绑定属性
本主题中显示的语法使用泛型 bindProp
=value
近似值,因为 BindingBase 或 Binding 的许多读/写属性可以通过 Binding
标记扩展/表达式语法进行设置。 它们可以按任意顺序设置,隐式 Binding.Path 除外。 (你可以选择显式指定 Path=
,在这种情况下,它可以按任意顺序设置)。 基本上,你可以使用以逗号分隔的 bindProp
=value
对来设置以下列表中的零个或多个属性。
其中一些属性值所需的对象类型不支持从 XAML 中的文本语法进行本机类型转换,因此需要标记扩展才能设置为特性值。 有关详细信息,请查看每个属性的 .NET Framework 类库中的“XAML 特性用法”部分;用于 XAML 特性语法的字符串(无论是否有进一步的标记扩展用法)与在 Binding
表达式中指定的值基本相同,但不会将 bindProp
表达式中的每个 =value
Binding
括在引号中。
BindingGroupName:标识可能的绑定组的字符串。 这是一个比较高级的绑定概念;请参阅 BindingGroupName 的参考页。
BindsDirectlyToSource:布尔值,可以是
true
或false
。 默认为false
。Converter:可以在表达式中设置为
bindProp
=value
字符串,但这样做需要值的对象引用,例如 StaticResource 标记扩展。 本例中的值是自定义转换器类的实例。ConverterCulture:可在表达式中设置为基于标准的标识符;请参阅 ConverterCulture 的参考主题。
ConverterParameter:可以在表达式中设置为
bindProp
=value
字符串,但这取决于所传递的参数的类型。 如果传递值的引用类型,则此用法需要对象引用,例如嵌套的 StaticResource 标记扩展。ElementName:与 RelativeSource 和 Source 互斥;这些绑定属性中的每一个均表示一种特定的绑定方法。 请参阅数据绑定概述。
FallbackValue:可以在表达式中设置为
bindProp
=value
字符串,但这取决于所传递的值的类型。 如果传递引用类型,则需要对象引用,例如嵌套的 StaticResource 标记扩展。IsAsync:布尔值,可以是
true
或false
。 默认为false
。Mode:值为 BindingMode 枚举中的常量名称。 例如
{Binding Mode=OneWay}
。NotifyOnSourceUpdated:布尔值,可以是
true
或false
。 默认为false
。NotifyOnTargetUpdated:布尔值,可以是
true
或false
。 默认为false
。NotifyOnValidationError:布尔值,可以是
true
或false
。 默认为false
。Path:描述数据对象或通用对象模型的路径的字符串。 该格式提供几种不同的约定来遍历对象模型,这些约定在本主题中无法充分描述。 请参阅 PropertyPath XAML 语法。
RelativeSource:与 ElementName 和 Source 互斥;这些绑定属性中的每一个均表示一种特定的绑定方法。 请参阅数据绑定概述。 需要嵌套的 RelativeSource MarkupExtension 用法来指定值。
Source:与 RelativeSource 和 ElementName 互斥;这些绑定属性中的每一个均表示一种特定的绑定方法。 请参阅数据绑定概述。 需要嵌套的扩展用法,通常是 StaticResource 标记扩展,该扩展引用来自键控资源字典的对象数据源。
StringFormat:描述绑定数据的字符串格式约定的字符串。 这是一个比较高级的绑定概念;请参阅 StringFormat 的参考页。
TargetNullValue:可以在表达式中设置为
bindProp
=value
字符串,但这取决于所传递的参数的类型。 如果传递值的引用类型,则需要对象引用,例如嵌套的 StaticResource 标记扩展。UpdateSourceTrigger:值为 UpdateSourceTrigger 枚举中的常量名称。 例如
{Binding UpdateSourceTrigger=LostFocus}
。 特定控件可能对此绑定属性使用不同的默认值。 请参阅 UpdateSourceTrigger。ValidatesOnDataErrors:布尔值,可以是
true
或false
。 默认为false
。 请参阅“备注”。ValidatesOnExceptions:布尔值,可以是
true
或false
。 默认为false
。 请参阅“备注”。XPath:描述 XML 数据源的 XMLDOM 路径的字符串。 请参阅使用 XMLDataProvider 和 XPath 查询绑定到 XML 数据。
以下是无法使用 Binding 标记扩展/Binding
表达式格式设置的 {Binding}
属性。
UpdateSourceExceptionFilter:此属性需要引用回调实现。 不能在 XAML 语法中引用事件处理程序以外的回调/方法。
ValidationRules:此属性使用 ValidationRule 对象的泛型集合。 这可以表示为 Binding 对象元素中的属性元素,但在
Binding
表达式中没有现成的特性分析方法可以使用。 请参阅 ValidationRules 的参考主题。
备注
重要
在依赖属性优先级方面,Binding
表达式等效于本地设置的值。 如果为先前使用 Binding
表达式的属性设置本地值,则会完全删除 Binding
。 有关详细信息,请参阅依赖属性值优先级。
本主题不包括从基本层面描述数据绑定。 请参阅数据绑定概述。
注意
MultiBinding 和 PriorityBinding 不支持 XAML 扩展语法。 请改用属性元素。 请参阅 MultiBinding 和 PriorityBinding 的参考主题。
XAML 的布尔值不区分大小写。 例如,可指定 {Binding NotifyOnValidationError=true}
或 {Binding NotifyOnValidationError=True}
。
涉及数据验证的绑定通常由显式 Binding
元素指定,而不是指定为 {Binding ...}
表达式,而且在表达式中设置 ValidatesOnDataErrors 或 ValidatesOnExceptions 的做法并不常见。 这是因为无法使用表达式格式轻松设置配套属性 ValidationRules。 有关详细信息,请参阅实现绑定验证。
Binding
是标记扩展。 当要求转义特性值应为非文本值或非处理程序名称时,通常会实现标记扩展,相对于在某些类型或属性上特性化的类型转换器而言,此要求更具有全局性。 XAML 中的所有标记扩展在其特性语法中均使用 {
和 }
字符,正是依据这一约定,XAML 处理器认定标记扩展必须处理字符串内容。 有关详细信息,请参阅标记扩展和 WPF XAML。
Binding
是一种非典型标记扩展,因为为 WPF 的 XAML 实现实现扩展功能的 Binding 类还实现了与 XAML 无关的其他几个方法和属性。 其他成员旨在使 Binding 成为一个更通用且独立的类,除了用作 XAML 标记扩展外,还能解决许多数据绑定的情况。