深入浅出wpf之Binding学习总结

Data Binding本身就是双向通信。Binding源是逻辑层的对象【有很多数据,通过属性暴露给外界】,Binding目标是UI层的控件对象。

1. 把控件作为Binding源于Binding标记扩展

<TextBox x:Name="textBox1" Text="{Binding Path=value,Element=slider1}"/>
<Slider x:Name="slider1"/>

2.没有Path的Binding

这是一种比较特殊的情况–Binding源本身就是数据且不需要Path来指明,典型的如string,int等基本类型就是这样。

<StackPanel>
<StackPanel.Resources>
<sys:String x:key="myString">
11111111111111
<sys:String>
</StackPanel.Resources>
</StackPanel>

3.为Binding指定源(Source)的几种方法

Binding的源是数据的来源,所以,只要一个对象包含数据并且通过属性吧数据暴露出来,它就能当作Binding的源来使用。

  1. 如果类型实现了INotifyPropertyChanged接口,则可通过在属性的set语句里激发PropertyChaned事件来通知Binding数据已被更新。
  2. 把容器的DataContext指定为Source,在建立Binding时只给他设置Path而不这是Source,Binding会自动把控件的DataContext当作自己的Source(它会沿着控件树一层一层的向外寻找,直到找到带有Path指定的属性为止)。
  3. 通过ElementName指定Source

4.没有Source的Binding-------使用DataContext作为Binding的源

基础:UI树的每个节点都具有DataContext。

<StackPanel>
<StackPanel.DataContext>
<sys:String>hhhhhh</sys:String>
</StackPanel.DataContext>
<Grid>
<TextBlock Text="{Binding}" Margin="5"/>
<TextBlock Text="{Binding}" Margin="5"/>
<TextBlock Text="{Binding}" Margin="5"/>
</Grid>
</StackPanel>

Binding自动向UI元素的上层寻找DataContext对象并把它作为Source的原因?
DataContext是一个依赖属性,依赖属性的特点就是当你没有为控件的某个依赖属性显示赋值时,控件会把自己容器的属性值借过来当作自己的属性值。实际上是属性值沿着UI元素树向下传递了。

上一篇:编译原理:绑定(Binding)总是发生在编译过程中吗


下一篇:【Vue】Vue自定义指令基础全面详解