将属性值延迟为数据绑定值,创建中间表达式对象并解释在运行时应用于元素及其绑定的数据上下文。
绑定表达式用法
<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 属性处理。 换句话说,<Binding
bindProp1="
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
近似值,因为许多BindingBase或Binding的读/写属性可以通过Binding
标记扩展/表达式语法设置。 它们可以按任意顺序设置,但隐式 Binding.Path除外。 (可以选择显式指定 Path=
,在这种情况下,可以按任意顺序设置)。 基本上,可以使用用 bindProp
=value
逗号分隔的对来设置以下列表中的零个或多个属性。
其中几个属性值要求对象类型不支持从 XAML 中的文本语法进行本机类型转换,因此需要标记扩展才能设置为属性值。 有关详细信息,请查看 .NET Framework 类库中每个属性的 XAML 属性用法部分;用于 XAML 属性语法的字符串,无论是否进一步使用标记扩展,基本上与在Binding
表达式中指定的值相同。不同之处在于,在Binding
表达式中,不需要为每个bindProp
=value
值加上引号。
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 扩展语法。 改为使用属性元素。 请参阅有关和PriorityBinding的MultiBinding参考主题。
XAML 的布尔值不区分大小写。 例如,可以指定 {Binding NotifyOnValidationError=true}
或 {Binding NotifyOnValidationError=True}
。
涉及数据验证的绑定通常由显式 Binding
元素而不是表达式 {Binding ...}
指定,并且设置 ValidatesOnDataErrors 或 ValidatesOnExceptions 表达式中并不常见。 这是因为无法在表达式窗体中轻松设置配套属性 ValidationRules 。 有关详细信息,请参阅 “实现绑定验证”。
Binding
是标记扩展。 当需要将属性值处理为非文本值或处理程序名称时,通常会实现标记扩展,这种需求比仅在特定类型或属性上使用类型转换器更具全局性。 XAML 中的所有标记扩展都使用{
}
其属性语法中的字符,这是 XAML 处理器识别标记扩展必须处理字符串内容的约定。 有关详细信息,请参阅 标记扩展和 WPF XAML。
Binding
是一个非典型标记扩展,该 Binding 类实现 WPF XAML 实现的扩展功能也实现与 XAML 无关的其他几种方法和属性。 其他成员旨在使 Binding 一个更通用和独立的类,除了充当 XAML 标记扩展外,还可以解决许多数据绑定方案。