数据绑定是种关系,告诉WPF从源对象提取信息设置目标对象的属性
源对象是WPF元素并且源属性是依赖项属性的数据绑定,这是最简单的数据绑定。
绑定表达式 :数据绑定表达式使用XAML扩展标记,以Binding开头,实际上是创建了System.Windows.Data.Binding类实例,且设置两个属性:ElementName属性(源元素)和Path属性(源元素中的属性)。
(1)绑定错误:WPF不会引发异常带来通知与数据绑定相关的问题。指定的元素或属性不存在,只是在目标属性中不能显示数据。WPF输出了绑定失败细节的跟踪信息。当调试应用程序时,该信息显示在Visual Studio的输出窗口中。
(2)绑定模式:数据绑定的特性是目标会被自动更新,而不管源是被如何修改的。Binding.Mode的所有枚举值:
OneWay:当源属性变化时更新目标属性
TwoWay:当源属性变化时更新目标属性,并且当目标属性变化时更新源属性
OneTime:最初根据源属性设置目标属性。然而,在此之后的所有改变都会被忽略
OneWayToSource:当目标属性变化时更新源属性
Default:此类绑定依赖于目标属性,他既可以是双向的,也可以是单向的。
代码创建绑定:实例化Binding对象,指定Source,Path,Mode
移除:BindingOperation类的ClearBinding(),ClearAllBindings(),都使用DependencyObject的ClearValue()
创建动态绑定——根据其他运行时信息修改绑定,或者根据环境创建不同的绑定
删除绑定——借助ClearBinding()或ClearAllBindings()方法。
创建自定义控件——更容易的修改控件的外观,将特定的细节从标记移到代码中。
检索绑定:1 BindingOperations.GetBinding() 2 BindingOperations.GetBingingExpression()
多绑定:Mode允许改变绑定方向,(双向绑定),创建多个设置同一属性的绑定表达式。例如TextBox.Text属性创建表达式以链接到TextBlock.FontSize属性,而TextBlock.FontSize又链接到Slider.Value属性的绑定表达式。
绑定更新:源的变化会立即影响目标,然而反向的传递从目标到源未必会立即发生。他们的行为由
Binding.UpdateSourceTrigger属性控制。
PropertyChanged:当目标属性变化时立即更新源。
LostFocus:当目标属性变化并且目标属性失去焦点时跟新源。
Explicit:除非调用BindingExpression.UpdateSource()方法,否则无法更新源。
Default:根据目标属性的元素确定更新行为。大多数属性的默认行为是PropertyChanged,但TextBox.Text属性的默认行为是LostFocus
绑定延迟: Binding的Delay,毫秒
绑定到非元素对象:
Source:指向源对象的引用,提供数据的对象。
RelativeSource:这是引用,使用RelativeSource对象指向源对象。有了这个附加层,在在当前元素的基础上构建引用。这似乎增加了复杂程度,当编写控件模板以及数据模板时很方便。
DataContext:如果没有使用Source或RelativeSource属性指定源,WPF就从当前元素开始在元素树中向上查找。检查每个属性的DataContext属性,并使用第一个非空的DataContext属性。
Source:静态资源x:Static
RelativeSource:还要创建嵌套的RelativeSource对象,更常用是使用Binding和RelativeSource标记扩展,将其合并到一个字符串中。{RelativeSource FindAncestor, AncestorType ={x:Type Window}}
Self:表达式绑定到同一元素的另一个属性上
FindAncestor:表达式绑定到父元素
PreviousData:表达式绑定到数据绑定列表中的前一个数据项。在
TemplateParent:表达式绑定到应用模板的元素
DataContext属性:将大量元素绑定到同一对象。设置Binding.Source属性相同的方法设置元素的DataContext属性。
省略源信息时,为null,继续向上在元素树中查找第一个不为null的数据。Binding Path=Source