WPF DataBinding

2017-04-20 20:23:09来源:CSDN作者:xiaoban3人点击

1.

Binding:“捆绑”,“关联”,“键联”等意思,也就是说,binding更注重表达他是像一种桥梁一样的关联关系。

2.

如果把Binding比作数据的桥梁,那么他的两端分别是Binding的源(Source,数据来的方向)和目标(Target,数据去的方向)。一般情况下,binding源是逻辑层的对象,binding目标是UI层的控件对象,就这样,数据被送到UI层展现。

3.

UI 上的元素关心的是该对象哪个属性值的变化?那这个属性就称为Binding的路径(Path). 但是Binding是一种自动机制,当值变化后属性要有能力通知Binding,让Binding吧变化传给UI元素。怎么做呢?方法是在属性的set语句中激发一个PropertyChanged事件(让座位数据源的类实现System.ComponentModel名称空间中的INotifyPropertyChanged接口。当为Binding设置了数据源后,Binding就会自动侦听来自这个接口的PropertyChanged事件)。如:
该图展示了3的实现接口方式

4.

Binding对源的要求:只要是一个对象,并且通过属性Property公开自己的数据。例如:1.控件把自己或自己的容器或子级元素当源、用一个控件作为另一个控件的数据源、把集合作为ItemsControl的数据源、使用Xml作为TreeView或Menu的数据源、把多个控件关联到一个“数据制高点”上,甚至干脆不给Binding指定数据源,让它自己去找。

深入浅出WPF中的笔记:

6.3.1把控件作为Binding源与Binding标记扩展

推动Slider,TextBox中的值会跟着变化
除了在C#代码中建立Binding外,在XAML代码里也可以设置Binding.
注意:在C#代码里可以访问Xaml代码中声明的变量,但在XAML代码中不能访问C#代码中声明的变量。因此,想要在XAML中建立UI元素与逻辑层对象的Binding,需要把逻辑层对象声明为XAML代码中的资源(Resource)–在后面“资源”一章学习。

Text="{Binding Path=Value,ElementName=slider1}" 使用了Binding标记扩展语法
与之等价的C#代码为:
textbox1.SetBinding(TextBox.TextProperty, new Binding("value") {ElementName="slider1"} );

  • 因为Binding类的构造器本身可以接受Path作为参数,所以Binding Path=Value也可以写为Binding Value

  • 因为在C#代码中我们可以直接访问控件对象,一般不会使用到Binding的ElementName属性,而是直接把对象赋值给Binding的Source属性。

  • Text=”{Binding Path=Value,ElementName=slider1}”` 可以理解为:”给Text属性设置Binding为。。。“,也可以把{Binding}视为一个值,一种间接的,不固定的赋值方式。

6.3.2控制Binding的方向及数据更新

控制Binding数据流向的属性为Mode,类型是BindingMode枚举:TwoWay,OneWay,OnTime,OneWayToSource和Default(default指binding的模式会根据实际情况来确定)

Binding的属性:UpdateSourceTrigger,取值为枚举:PropertyChanged、LostFocus、Explicit和Default(default行为和LostFocus一致)。
6.3.1的例子中,什么都不用动,Text="{Binding Path=Value,ElementName=slider1,UpdateSourceTrigger=PropertyChanged}" 加上一个属性,在TextBox中输入值,Slider得值就会跟随着变化。

Binding还有NotifyOnSourceUpdate和NotifyOnTargetUpdate两个bool类型的实行。为true时,当源或目标被更新后Binding会激发相应的SourceUpdate事件和TargetUpdate事件。实际工作中,可以通过监听这两个事件找出有哪些数据或控件被更新了

6.3.3 Binding的路径(Path)

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台