WPF的数据绑定(二)创建绑定

使用 Binding 对象建立绑定,每个绑定通常都具有四个组件:绑定目标、目标属性、绑定源、要使用的源值的路径。
既可用标记扩展(XAML)来声明绑定,也可用代码来实现绑定。

绑定源的指定主要有以下4种方式:
1.DataContext:用于将多个属性绑定到相同源,指定父元素的DataContext属性,各子元素从上级继承 DataContext 值来实现。
2.通过设置 Binding 上的 Source 属性来显式指定绑定源,一对一声明绑定
3.通过设置 Binding 上的 ElementName 属性,当绑定到应用程序中的其他元素时(例如在使用滑块调整按钮的宽度时),ElementName 属性是很有用的。
4.通过设置 Binding 上的 RelativeSource 属性,当在 ControlTemplate 或 Style 中指定绑定时,RelativeSource 属性是很有用的

指定值的路径主要通过:
1.Path:用于对象的绑定
2.XPath:用于XML数据的绑定
当绑定到对象所有属性或绑定到集合时可不使用Path,即Path使用默认值。
Path使用情况举例如下:
1.绑定的源对象的属性名,如 Path=PropertyName。
2.可以指定属性的子属性。例如,子句 Path=ShoppingCart.Order
3.若要绑定到附加属性,应在附加属性周围放置圆括号。Path=(DockPanel.Dock)。
4.可以在要应用索引器的属性名后面的方括号内指定属性的索引器。例如,子句 Path=ShoppingCart[0]
5.可以在 Path 子句中混合索引器和子属性;例如,Path=ShoppingCart.ShippingInfo[MailingAddress,Street].
6.在索引器内部,您可以有多个由逗号 (,) 分隔的索引器参数。可以使用圆括号指定每个参数的类型。例如,您可以有 Path="[(sys:Int32)42,(sys:Int32)24]",其中 sys 映射到 System 命名空间。
7.如果源为集合视图,则可以用斜杠 (/) 指定当前项。例如,子句 Path=/ 用于设置到视图中当前项的绑定。如果源为集合,则此语法指定默认集合视图的当前项。
8.可以结合使用属性名和斜杠来遍历作为集合的属性。例如,Path=/Offices/ManagerName 指定源集合的当前项,该源集合包含也作为集合的 Offices 属性。其当前项是一个包含 ManagerName 属性的对象。
9.也可以使用句点 (.) 路径绑定到当前源。例如,Text="{Binding}" 等效于 Text="{Binding Path=.}"。

在某些情况下,可以使用 Path 属性,即使在数据为 XML 时。例如,如果要访问返回的 XmlNode(作为 XPath 查询的结果)的 Name 属性,则应使用 Path 属性和 XPath 属性。
1.System.Xml.XmlNode 是一个 common language runtime (CLR) 对象,所以可以用Path
2.System.Xml.XmlElement 和 System.Xml.XmlAttribute 都是从 System.Xml.XmlNode 派生的
3.LINQ to XML 对象 XDocument 和 XElement 不使用 XPath


类 BindingExpression 是维持源与目标之间的连接的基础对象。一个绑定包含可以在多个绑定表达式之间共享的所有信息。BindingExpression 是无法共享的实例表达式,其中包含有关 Binding 的所有实例信息。
可以通过对数据绑定对象调用 GetBindingExpression 的返回值来获取 BindingExpression 对象,执行相关的动作.

 

 

转义机制

  • 在索引器 ([ ]) 内部,插入符号 (^) 用于对下一个字符进行转义。

  • 如果在 XAML 中设置 Path,则还需要使用 XML 实体对 XML 语言定义专用的某些字符进行转义:

    • 使用 & 对字符“&”进行转义。

    • 使用 > 对结束标记“>”进行转义。

  • 此外,如果您使用标记扩展语法描述特性中的整个绑定,则需要使用反斜杠 \ 对 WPF 标记扩展分析程序专用的字符进行转义:

    • 反斜杠 \ 本身是转义字符。

    • 等号 (=) 将属性名与属性值隔开。

    • 逗号 (,) 用于分隔属性。

    • 右大括号 (}) 是标记扩展的结尾。

默认行为

如果未在声明中指定默认行为,则默认行为如下。
  • 创建一个尝试在绑定源值与绑定目标值之间执行类型转换的默认转换器。如果无法进行转换,则默认转换器会返回 null

  • 如果您不设置 ConverterCulture,则绑定引擎会使用绑定目标对象的 Language 属性。在 XAML 中,此属性默认为“en-US”,如果已显式设置了一个值,则从页面的根元素(或任何元素)继承该值。

  • 只要绑定已有数据上下文(例如,来自父元素的继承数据上下文),并且该上下文所返回的项或集合适合于绑定,而不需要进一步的路径修改,则绑定声明可以不必有任何子句:{Binding}。在绑定作用于集合的情况下,这通常是为数据样式指定绑定的方式。有关更多信息,请参见绑定源概述中的“整个对象用作绑定源”一节。

  • 默认 Mode 可能是单向,也可能是双向,具体取决于所绑定的依赖项属性。您始终可以显式声明绑定模式,以确保绑定具有所需的行为。通常,用户可编辑的控件属性(如 TextBox.TextRangeBase.Value)默认为双向绑定,而其他大多数属性默认为单向绑定。

  • 默认 UpdateSourceTrigger 值可能是 PropertyChanged,也可能是 LostFocus,具体也取决于所绑定的依赖项属性。多数依赖项属性的默认值为 PropertyChanged,而 TextBox.Text 属性的默认值为 LostFocus

转载于:https://www.cnblogs.com/xbj746/archive/2013/01/05/2846134.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值