WPF的Binding学习笔记(一)

来源:互联网 发布:把淘宝链接转换成文字 编辑:程序博客网 时间:2024/05/16 18:58

一、binding的一般步骤
1,准备数据源
    数据源需要实现INotifyPropertyChanged接口
    例如:

复制代码
class Person : INotifyPropertyChanged{  public event PropertyChangedEventHandler PropertyChanged;  private string name;  public string Name  {    get { return name; }    set    {      name = value;      //触发事件      if (PropertyChanged != null)      {                    PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));      }    }  }}
复制代码

2,准备Binding对象

Person p = new Person("D-boy");Binding binding = new Binding();binding.Source = p;binding.Path = new PropertyPath("Name");

3,用Binding对象将数据源和目标连结
假如在XAML处添加了一个TextBlock目标

<TextBlock x:Name="txtName"></TextBlock>

那么可以使用BindingOperations.SetBinding()方法将其进行binding了。

BindingOperations.SetBinding(txtName, TextBlock.TextProperty, binding);

也可以使用UI元素的基类FramworkElement封装的SetBinding函数

txtName.SetBinding(TextBlock.TextProperty, binding);

将上面两步结合在一起可以这样写

txtName.SetBinding(TextBlock.TextProperty, new Binding("Name") { Source=p});


二、控件间的Binding
XAML处如下两个控件

<TextBox x:Name="txt1" /><TextBlock x:Name="txt2" Text="{Binding Path=Text, ElementName=txt1}" />

 如果要改变Binding源的触发事件,可以设置Binding的UpdateSourceTrigger属性为LostFocus、Explicit、PropertyChanged中的一种。

三、Binding的Path
1,Path的设置
如上例,
XAML处为

<TextBlock x:Name="txt2" Text="{Binding Path=Text, ElementName=txt1}" />

或是

<TextBlock x:Name="txt2" Text="{Binding Text, ElementName=txt1}" />

相应的C#代码为

txt2.SetBinding(TextBlock.TextProperty, new Binding(){ Path=new PropertyPath("Value"),Source=txt1});

或是

txt2.SetBinding(TextBlock.TextProperty, new Binding("Text") { Source=txt1});

之类的...
2,Path还支持一路点下去~~
比如

<TextBlock x:Name="txt2" Text="{Binding Text.Length, ElementName=txt1}" /><TextBlock x:Name="txt2" Text="{Binding Text.[2], ElementName=txt1}" />

3,当数据源本身就是数据的时候,Path为.
window添加命名空间

xmlns:sys="clr-namespace:System;assembly=mscorlib"

添加资源

<Window.Resources>     <sys:String x:Key="string">            string!!!!!     </sys:String></Window.Resources>

使用Binding

<TextBlock x:Name="txt2" Text="{Binding ., Source={StaticResource ResourceKey=string}}" />

精简为

<TextBlock x:Name="txt2" Text="{Binding Source={StaticResource ResourceKey=string}}" />

当然这样的情况,我就直接

<TextBlock x:Name="txt2" Text="{StaticResource ResourceKey=string}" />

-_- !

0 0