WPF的Binding學習筆記(一)


一、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}" />

-_- !


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM