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事件)。如:
4.
Binding对源的要求:只要是一个对象,并且通过属性Property公开自己的数据。例如:1.控件把自己或自己的容器或子级元素当源、用一个控件作为另一个控件的数据源、把集合作为ItemsControl的数据源、使用Xml作为TreeView或Menu的数据源、把多个控件关联到一个“数据制高点”上,甚至干脆不给Binding指定数据源,让它自己去找。
深入浅出WPF中的笔记:
6.3.1把控件作为Binding源与Binding标记扩展
除了在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枚举: