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种

  1. OneWay:当源属性变化时,更新目标属性
  2. TwoWay:当源属性变化时更新目标属性,并且当目标属性发生变化时更新源属性
  3. OneTime:最初源属性和目标属性绑定,其后所有改变会被忽略
  4. OneWayToSource:与oneWay类似,当方向相反
  5. Default:此类绑定依赖于目标属性,既可以是双向的,也可以是单向的,除非指定了模式,否则绑定都是该模式

5.绑定更新

当数据发生变化后,可根据绑定跟新的条件来通知数据的跟新。跟新条件分为四种

  1. PropertyChanged 当目标属性发生变化时立即更新源(实时更新)
  2. LostFocus:当目标属性方式变化并且丢失焦点时跟新源(TextBox的数据跟新)
  3. Explicit:除非调用BindingExpression.UpdateSource()方法,否则无法更新源
  4. 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。

 

 

 

posted @ 2019-12-10 09:59  无限环  阅读(581)  评论(0编辑  收藏  举报