WPF之Binding类

Binding类:提供对绑定定义的高级访问,该绑定连接绑定目标对象(通常为 WPF 元素)的属性和任何数据源(例如数据库、XML 文件,或包含数据的任何对象)。

Mode 属性:获取或设置一个值,该值指示绑定的数据流方向。

(Default:使用绑定目标的默认 Mode 值。 每个依赖属性的默认值都不同。 通常,用户可编辑的控件属性(如文本框和复选框的控件属性)默认为双向绑定,而其他大多数属性默认为单向绑定。 确定依赖属性绑定在默认情况下是单向还是双向的编程方法是:使用 GetMetadata 获取属性的属性元数据,然后检查 BindsTwoWayByDefault 属性的布尔值。)
(OneTime:在应用程序启动或数据上下文更改时,更新绑定目标。 如果你在适合使用当前状态的快照或数据实际为静态数据的位置使用数据,则此类型的绑定适合。 如果你想使用源属性中的某个值来初始化目标属性,且提前不知道数据上下文,则此类型的绑定也有用。 这是实质上是 OneWay 绑定的一种简化形式,它在源值不更改的情况下提供更好的性能。)
(OneWay:在更改绑定源(源)时更新绑定目标(目标)。 如果绑定的控件为隐式只读,则此类型的绑定适用。 例如,你可能绑定到股票代码等源。 或者可能是未向目标属性提供控件接口来进行更改,例如表的数据绑定背景色。 如果无需监视目标属性的更改,则使用 OneWay 绑定模式可避免 TwoWay 绑定模式的系统开销。)
(OneWayToSource:在目标属性更改时,更新源属性。)
(TwoWay:导致更改源属性或目标属性时自动更新另一方。 此类型的绑定适用于可编辑窗体或其他完整交互式的 UI 方案。)

Path 属性:获取或设置绑定源属性的路径。

下面的示例演示创建样式触发器 ToolTip 报告验证错误消息。 Setter 的值将绑定到当前的错误内容 TextBox ( TextBox 使用样式) 使用 RelativeSource 属性。

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
  <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="true">
      <Setter Property="ToolTip"
        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors)[0].ErrorContent}"/>
    </Trigger>
  </Style.Triggers>
</Style>

每个绑定通常具有四个组件︰ 绑定目标对象、 目标属性、 绑定源和要使用的绑定源中的值的路径。 有关这些数据绑定概念的详细信息,请参阅 数据绑定概述。
使用 Path 属性来指定您想要将绑定到的源值︰

  • 在最简单的情况下, Path 属性值是要使用的绑定,如的源对象的属性的名称 Path=PropertyName。
  • 可以通过类似于在中使用的语法指定属性的子属性 C#。 例如,子句 Path=ShoppingCart.Order 子属性中设置的绑定
    Order 对象或属性的 ShoppingCart。
  • 若要将绑定到的附加属性,将附加的属性旁的括号。 例如,若要绑定的附加属性
    DockPanel.Dock, ,语法是 Path=(DockPanel.Dock)。
  • 可以在其中应用索引器的属性名后面的方括号内指定的属性的索引器。 例如,子句 Path=ShoppingCart[0]
  • 索引器和子属性可以混合在 Path 子句; 例如,
  • 在索引器内部,您可以用逗号
    (,) 隔开的多个索引器参数。 可以使用括号指定的每个参数的类型。 例如,可以让
    Path=”[(sys:Int32)42,(sys:Int32)24]”, ,其中 sys 映射到 System 命名空间。
  • 当源是一个集合视图时,可以以斜杠 (/) 指定的当前项。 例如,子句 Path=/ 将绑定设置为视图中的当前项。
    当源是一个集合时,此语法指定默认集合视图的当前项。
  • 属性名和斜杠可以组合以遍历集合的属性。 例如,
    Path=/Offices/ManagerName 指定源集合,其中包含的当前项 Offices 也是集合的属性。
    其当前项是一个对象,包含 ManagerName 属性。
  • (可选) 一个句点 (.) 路径可以用于将绑定到当前的源。 例如,
    Text=”{Binding}” 等同于 Text=”{Binding Path=.}”。
Source 属性:获取或设置要用作绑定源的对象。

(默认情况下,绑定会继承由指定的数据上下文 DataContext 如果已设置了一个属性。 但是, Source 属性是一种可以显式设置的源的 Binding 和重写继承的数据上下文。 如果您不需要建立在的作用域的功能的多个属性继承相同的数据上下文,则可以使用 Source 属性而不是 DataContext 属性。
Binding.ElementName 和 Binding.RelativeSource 属性还允许您设置绑定的源显式。 但是,这三个属性之一 ElementName, ,Source, ,和 RelativeSource, 、 都应该每个组绑定,或可能发生冲突。 如果绑定源冲突,此属性将引发异常。
若要清除此属性,请将其设置为 DependencyProperty.UnsetValue。)

ElementName 属性:获取或设置要用作绑定源对象的元素的名称。

(相关元素的 Name 属性或 x:Name Directive 的值。 只有通过 RegisterName 将元素注册到适当的 NameScope 后,才能在代码中引用这些元素。 有关详细信息,请参阅 WPF XAML Namescopes。
默认值为 null。)

XPath 属性:获取或设置 XPath 查询,该查询返回要使用的 XML 绑定源上的值。

(绑定源时 XML 数据而不是 公共语言运行时 (CLR) 对象, XPath 而不是使用属性 Path 属性以指示要使用的绑定源中的值的路径。
通过设置 XPath 属性,您要创建 XPath 查询,以便选择的节点的集合 (System.Xml.XmlElement 和 System.Xml.XmlAttribute 都派生自 System.Xml.XmlNode)。 System.Xml.XmlNode 是 公共语言运行时 (CLR) 对象,这意味着您可以绑定到使用其属性 Path 属性。
XmlNode.SelectNodes 方法将处理 XPath 表达式从 XPath 属性。 XPath 不支持函数。 有关 XPath 表达式的信息,请参阅 SelectNodes 文档和示例部分中提供的一些示例。)

RelativeSource 属性:通过指定绑定源相对于绑定目标位置的位置,获取或设置此绑定源。

(若要将对象的一个属性绑定到的同一个对象,另一个属性或在样式或模板中定义一个绑定,通常使用此属性。
默认情况下,绑定会继承由指定的数据上下文 DataContext 如果已设置了一个属性。 但是, RelativeSource 属性是一种可以显式设置的源的 Binding 和重写继承的数据上下文。 有关详细信息,请参阅 如何︰ 指定绑定源。
Binding.ElementName 和 Binding.Source 属性还允许您设置绑定的源显式。 但是,这三个属性之一 ElementName, ,Source, ,和 RelativeSource, 、 都应该每个组绑定,或可能发生冲突。 如果绑定源冲突,此属性将引发异常。)

System.Windows.Data.RelativeSource

AncestorLevel属性:
以 FindAncestor 模式获取或设置要查找的上级级别。 使用 1 指示最靠近绑定目标元素的项。
AncestorType属性:
获取或设置要查找的上级节点的类型。
Mode属性:
获取或设置 RelativeSourceMode 值,该值描述相对于绑定目标的位置的绑定源的位置。

FindAncestor:引用数据绑定元素的父链中的上级。 这可用于绑定到特定类型的上级或其子类。 若要指定 AncestorType 和/或 AncestorLevel,这就是应使用的模式。
PreviousData:允许在当前显示的数据项列表中绑定上一个数据项(不是包含数据项的控件)。
Self:引用正在其上设置绑定的元素,并允许你将该元素的一个属性绑定到同一元素的其他属性上。
TemplatedParent:引用应用了模板的元素,其中此模板中存在数据绑定元素。 这类似于设置 TemplateBindingExtension,且仅在 Binding 位于模板内部时适用。

PreviousData属性:
获取用于返回一个静态值 RelativeSource 为构造 PreviousData 模式。
Self属性:
获取用于返回一个静态值 RelativeSource 为构造 Self 模式。
TemplatedParent属性:
获取用于返回一个静态值 RelativeSource 为构造 TemplatedParent 模式。

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LADT-LINZI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值