WPF and Silverlight学习笔记(二十):WPF数据绑定概述2010-12-17 博客园 龙腾于海WPF数据绑定为应用程序提供了一种表示数据和与数据交互的简单而又一致的 方法。元素能够以公共语言运行库 (CLR) 对象和 XML 的形式绑定到各种数据源 中的数据。一、数据绑定的基本概念:数据绑定涉及到两个方面 :一个是绑定源,再一个是绑定目标。绑定源即控件绑定所使用的源数据,绑定 目标即数据显示的控件。1、对于绑定源,在WPF可以是以下四种:CLR对象:可以绑定到CLR类的公开的属性、子属性、索引器上ADO.Net对象:例如DataTable、DataView等XML文件:使用XPath 进行解析DependencyObject:绑定到其依赖项属性上,即控件绑定控件2、对于绑定目标,必须是WPF中的DependencyObject,将数据绑定到其 依赖项属性上。

二、绑定的基本方式根据数据流的方向,WPF中的数据绑定分为以下 四种:

OneWay 绑定导致对源属性的更改会自动更新目标属性,但是对目标属性的更 改不会传播回源属性。此绑定类型适用于绑定的控件为隐式只读控件的情况。例 如,您可能绑定到如股票行情自动收录器这样的源,或许目标属性没有用于进行 更改的控件接口(如表的数据绑定背景色)。如果无需监视目标属性的更改,则 使用 OneWay 绑定模式可避免 TwoWay 绑定模式的系统开销。TwoWay 绑 定导致对源属性的更改会自动更新目标属性,而对目标属性的更改也会自动更新 源属性。此绑定类型适用于可编辑窗体或其他完全交互式 UI 方案。大多数属性 都默认为 OneWay 绑定,但是一些依赖项属性(通常为用户可编辑的控件的属性 ,如 TextBox 的 Text 属性和 CheckBox 的 IsChecked 属性)默认为 TwoWay 绑定。确定依赖项属性绑定在默认情况下是单向还是双向的编程方法是:使用 GetMetadata 获取属性的属性元数据,然后检查 BindsTwoWayByDefault 属性的 布尔值。OneWayToSource 与 OneWay 绑定相反;它在目标属性更改时更 新源属性。一个示例方案是您只需要从 UI 重新计算源值的情况。OneTime绑定 ,该绑定会导致源属性初始化目标属性,但不传播后续更 改。这意味着,如果数据上下文发生了更改,或者数据上下文中的对象发生了更 改,则更改会反映在目标属性中。如果您使用的数据的当前状态的快照适于使用 ,或者这些数据是真正静态的,则适合使用此绑定类型。如果要使用源属性中的 某个值初始化目标属性,并且事先不知道数据上下文,则也可以使用此绑定类型 。此绑定类型实质上是 OneWay 绑定的简化形式,在源值不更改的情况下可以提 供更好的性能。每个依赖项属性的默认值都不同。一般情况下,用户可 编辑控件属性(例如文本框和复选框的属性)默认为双向绑定,而多数其他属性 默认为单向绑定。确定依赖项属性绑定在默认情况下是单向还是双向的编程方法 是:使用 GetMetadata 来获取属性的属性元数据,然后检查 BindsTwoWayByDefault 属性的布尔值。