绑定标记扩展

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

绑定表达式用法

<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 属性。 但是,这不是 真正的标记扩展用法,它只是设置 CLR 类属性的属性的常规 Binding XAML Binding 处理。 换句话说 <Binding ,bindProp1 =" value1 "[ bindPropN valueN 是对象元素用法的属性的等效语法 =" "]*/> Binding ,而不是 Binding 表达式用法。 若要了解 的特定属性的 XAML 属性用法,请参阅类库中 相关属性的 Binding "XAML 属性用法.NET Framework Binding 部分。

XAML 值

bindProp1, bindPropN 要设置的 BindingBindingBase 属性的名称。 并非所有属性都可以使用 扩展进行设置,并且某些属性只能在表达式中通过使用进一步的嵌套标记扩展 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

以下是不能使用标记 Binding 扩展/表达式窗体 Binding 设置的 {Binding} 的属性。

注解

重要

就依赖属性优先级而言, Binding 表达式等效于本地设置的值。 如果为以前具有表达式的属性设置本地值 Binding ,将 Binding 完全删除 。 有关详细信息,请参阅依赖属性值优先级

本主题未介绍基本级别的数据绑定。 请参阅 数据绑定概述

备注

MultiBindingPriorityBinding和 不支持扩展 XAML 语法。 应改为使用属性元素。 请参阅 和 的参考 MultiBinding 主题 PriorityBinding

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

涉及数据验证的绑定通常由显式元素而不是表达式指定,在表达式中设置 或 Binding {Binding ...} ValidatesOnDataErrors ValidatesOnExceptions 并不常见。 这是因为不能以表达式 ValidationRules 形式轻松设置配套属性。 有关详细信息,请参阅 实现绑定验证

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

Binding 是一个非典型标记扩展,因为实现 WPF 的 XAML 实现扩展功能的类还实现了与 XAML 不相关的其他几种方法和 Binding 属性。 其他成员旨在创建一个功能更通用且自包含的类,该类除了可以用作 XAML 标记扩展外,还可以处理许多 Binding 数据绑定方案。

请参阅