绑定标记扩展

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

绑定表达式用法

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

语法说明

在这些语法中,[]* 并不是字面量。 它们是符号表达的一部分,用于指示可以使用零个或多个 bindProp= 对,并且这些对之间以及与前面的 bindProp= 对之间有一个 , 分隔符。

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

XAML 值

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

未限定的 {Binding}

在“绑定表达式用法”中显示的{Binding}用法创建了一个Binding对象,具有默认值,其中包括null的初始Binding.Path。 在许多情况下,这仍然很有用,因为创建的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 完全删除该属性。 有关详细信息,请参阅 依赖属性值优先级

这个主题未涵盖基础数据绑定的描述。 请参阅 数据绑定概述

注释

MultiBinding 并且 PriorityBinding 不支持 XAML 扩展语法。 改为使用属性元素。 请参阅有关和PriorityBindingMultiBinding参考主题。

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

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

Binding 是标记扩展。 当需要将属性值处理为非文本值或处理程序名称时,通常会实现标记扩展,这种需求比仅在特定类型或属性上使用类型转换器更具全局性。 XAML 中的所有标记扩展都使用{}其属性语法中的字符,这是 XAML 处理器识别标记扩展必须处理字符串内容的约定。 有关详细信息,请参阅 标记扩展和 WPF XAML

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

另请参阅