命名空间:System.Windows.Data
作用:提供对绑定定义的高级访问,该绑定连接绑定目标对象(通常为 WPF 元素)的属性和任何数据源(例如数据库、XML 文件,或包含数据的任何对象)。在WPF中被封装成一个类,其相当于数据的桥梁,两端分别是Binding的源和目标。
**************************************************************************************************************
以下基本WPF数据绑定概念。
每个绑定通常都具有以下四个组件: 绑定目标对象、 目标属性、 绑定源,和一个Path到要使用的绑定源中的值。 例如,如果你想要的内容绑定TextBox到 Student 对象的 Name 属性,您的目标对象是TextBox,目标属性是Text属性,要使用的值是名称,并且源对象是学生对象。
<TextBlock Text="{Binding Student.Name}"/>
目标属性必须为依赖属性。 这也意味着您不能将字段绑定。 大多数属性UIElement对象是依赖项属性,大多数依赖项属性,除了只读属性,默认情况下支持数据绑定。 (仅DependencyObject类型可以定义依赖关系属性和所有UIElement对象派生自DependencyObject。)
注意,绑定源对象并不限于自定义 CLR 对象。 WPF 数据绑定支持 CLR 对象和 XML 形式的数据。 若要提供一些示例,绑定源可以是UIElement,任何列表对象、CLR与关联的对象ADO.NET数据或 Web 服务或 XmlNode 包含你XML数据。
使用Mode属性来指定数据流的方向。 若要检测源更改中单向或双向绑定,源必须实现一种合适的属性更改通知机制如INotifyPropertyChanged。
**************************************************************************************************************
常用字段
Converter 获取或设置要使用的转换器。
Mode(Default、OneTime、OneWay、OneWayToSource、TwoWay) 获取或设置一个值,该值指示绑定的数据流方向。
NotifyOnSourceUpdated 获取或设置一个值,该值指示当值从绑定目标传输到绑定源时是否引发 SourceUpdated 事件。
NotifyOnTargetUpdated 获取或设置一个值,该值指示当值从绑定源传输到绑定目标时是否引发 TargetUpdated 事件。
Path 获取或设置绑定源属性的路径。
RelativeSource 通过指定绑定源相对于绑定目标位置的位置,获取或设置此绑定源。
Source 获取或设置要用作绑定源的对象。
StringFormat 获取或设置一个字符串,该字符串指定如果绑定值显示为字符串,应如何设置该绑定的格式。
<TextBlock Text="{Binding NowTime, StringFormat=yyyy-MM-dd HH:mm:ss}"/>
**************************************************************************************************************
下面来看一个简单示例
下面的示例使用StringFormat属性来转换Price,即Double,为一个字符串,表示一种货币。
<ListView ItemsSource="{StaticResource MyData}">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Path=Description}"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Price, StringFormat=Now {0:c}!}"/>
</GridView>
</ListView.View>
</ListView>
下面的示例使用StringFormat上的属性MultiBinding生成一个字符串,包含Description并Price中每一项ListBox。
<ListBox ItemsSource="{StaticResource MyData}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} -- Now only {1:C}!">
<Binding Path="Description"/>
<Binding Path="Price"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<DataGrid ItemsSource="{Binding DisplayMessageList}">
<DataGrid.Columns>
<DataGridTemplateColumn Width="40">
<DataGridTemplateColumn.Header>
<TextBlock Text="序号"/>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid MinWidth="40">
<TextBlock Text="{Binding Index}"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
**************************************************************************************************************
UpdateSourceTrigger 获取或设置一个值,它可确定绑定源更新的计时。绑定TwoWay或OneWayToSource侦听目标属性中的更改并将其传播回源。 这称为更新源。 通常,只要目标属性发生更改,可能发生这些更新。 这是相当不错的复选框和其他简单控件,但它不是通常适用于文本字段。 正在更新后每次击键可能导致性能降低,拒绝用户对常用机会退格删除,并在提交新值之前修改键入错误。 因此,默认值UpdateSourceTrigger的值Text属性是LostFocus而不PropertyChanged。
如果您设置UpdateSourceTrigger值设为Explicit,则必须调用UpdateSource方法或所做的更改将不会传播回源。
Default: 绑定目标属性的默认 UpdateSourceTrigger 值。 大多数依赖属性的默认值为 PropertyChanged,而 Text 属性的默认值为 LostFocus。
Explicit:仅在调用 UpdateSource() 方法时更新绑定源。
LostFocus:每当绑定目标元素失去焦点时,都会更新绑定源。
PropertyChanged:每当绑定目标属性发生更改时,都会更新绑定源。
**************************************************************************************************************