WPF 绑定简介
1.绑定简介
数据绑定就是一种关系。即从源对象提取信息,将这些信息设置到目标对象的属性。
绑定分为四部分:源对象,源属性,绑定目标,目标属性。当源属性和目标属性不一致时需要用到转换器进行数据转换。目标属性始终为依赖项属性,源对象可以为任何内容。
2.绑定方式
WPF绑定方式非为两种:标记语言绑定和代码创建绑定。
标记语言绑定:绑定清晰,创建绑定时完成简单<TextBlock x:Name="textBolck" Text="{Binding Source=ContentName,Path=Name1}"/>
Source:源对象
Path:源属性
TextBlock:绑定目标
Text:目标属性
代码绑定:可以动态绑定和移除绑定
Binding binding=new Binding();
binding.source=ContentName;//设置绑定源
binding.Path=new PropertyPath(“Name1”);//设置源属性
binging.Model=BindingModel.TwoWay;////设置绑定模式
textBolck.setBinding(TextBlock.Text,binding);//对绑定目标的目标属性进行绑定
3.绑定错误提示
WPF不会引发异常来通知数据绑定相关的问题,就算指定的元素或属性不存在,也不会由异常提示,只是不能再目标属性中显示数据。只有在调试应用程序时,异常信息显示在VS的Output窗口
4.绑定模式
设置绑定模式用于控制源目标和目标属性的数据刷新。模式分为5种
- OneWay:当源属性变化时,更新目标属性
- TwoWay:当源属性变化时更新目标属性,并且当目标属性发生变化时更新源属性
- OneTime:最初源属性和目标属性绑定,其后所有改变会被忽略
- OneWayToSource:与oneWay类似,当方向相反
- Default:此类绑定依赖于目标属性,既可以是双向的,也可以是单向的,除非指定了模式,否则绑定都是该模式
5.绑定更新
当数据发生变化后,可根据绑定跟新的条件来通知数据的跟新。跟新条件分为四种
- PropertyChanged 当目标属性发生变化时立即更新源(实时更新)
- LostFocus:当目标属性方式变化并且丢失焦点时跟新源(TextBox的数据跟新)
- Explicit:除非调用BindingExpression.UpdateSource()方法,否则无法更新源
- Default:根据目标的数据源的元数据确定更新行为,大多数默认的时PropertyChanged,TextBox.Text属性的默认时LocatFoucs
6.绑定延迟
在需要防止数据绑定触发操作和修改源对象,源对象在数据绑定属性发生变化时执行处理器的密集操作,在此情况下,可能要添加短暂的延迟时间,避免频繁地触发操作(比如点击按钮时)
<Button x:Name="textBolck" Text="{Binding Source=ContentName,Path=Name1, Delay=100}",/>
7.源属性绑定
1. 绑定到元素对象:ElementName,将源对象设置为ElementName指定的Name,源属性为Path指定的属性
<TextBlock Text="{Binding ElementName=button,Path=Text}"/>
2. 绑定到非元素对象
a.Source:该属性直接指向源对象的引用,及提供源对象的对象
<Window.Resources>
<FontFamily x:Key="sourBind">SourceBind</FontFamily>
<Window.Resources>
<TextBlock Text="{Binding Source={StaticResource sourBind},Path=Source}"/>
b.RelativeSource:这是个引用,使用RelativeSource对象指定源对象
<TextBlock Text="{Binding Name1,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}"/>
c.DataContext:WPF从当前元素开始查找元素树中向上查找,检查每个源属的DataContext,并使用第一个非空的DataContext属性
8.移除绑定
1.通过代码可以适应BindingOperation类的两个静态方法移除绑定
clearBinding()方法使用依赖项属性(该属性具有希望删除的绑定)的引用作为参数
ClearAllBinding()移除所有的绑定
2.手动将绑定设为其他数据绑定或者设为null。