2014年12月25日 星期四

WPF Binding (一) 控制項之間的繫結

  Binding 的作用是在於將資料顯示在控制項上,並且能夠根據來源或目的端的變更自動更新。要讓控制項能夠即時顯示各種資料來源的資料那麼就必要倚靠資料繫結的技術,資料繫結是利用 Binding 物件將控制項的某個屬性也就是目標屬性(Target Property)與資料關連在一起。資料來源可以是 XML 資料與 .NET CLR 物件,包含ADO.NET物件、其它Managed物件,或dynamic物件,而目標屬性必需是依存屬性(Dependency Property),如 TextBox 的 Text 屬性。以以下簡單例子來展示控制項之間的繫結。

  • xaml

<Window x:Class="SimpleDataBinding.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="189" Width="223">
    <StackPanel Orientation="Vertical">
        <Label Height="30"
               Width="150"
               Margin="5"
               HorizontalAlignment="Left"
               Content="{Binding Path=Text,ElementName=textBox}"/>
        <TextBox x:Name="textBox"
                 Width="150"
                 Margin="5"
                 HorizontalAlignment="Left"/>
    </StackPanel>
</Window>

  繫結的語法是使用大括弧{},Binding 是標記擴充(Markup Extension)類別的名稱,ElementName 是來源名稱,Path 是要給於目標的屬性,要注意的是 ElementName 和 Path 之間要用逗號隔開。在程式碼中 Binding 的寫法如下,要注意的是在 xaml 頁面中,Label 要先給個 Name 後才可以做 Binding。



  • C#

<StackPanel Orientation="Vertical">
    <Label x:Name="label"
           Height="30"
           Width="150"
           Margin="5"
           HorizontalAlignment="Left"/>
    <TextBox x:Name="textBox"
             Width="150"
             Margin="5"
             HorizontalAlignment="Left"/>
</StackPanel>

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Binding binding = new Binding();
       binding.Source = this.textBox;
        binding.Path = new PropertyPath("Text");
        this.label.SetBinding(Label.ContentProperty, binding);


        //this.label.SetBinding(Label.ContentProperty,new Binding("Text") { Source = this.textBox });
    }
}

  要完成目標物件的 Binding 之前,先建立個 Binding 物件,接下來依序設定 Source 來源及 Path,然後再加入目標物件方法 SetBinding(),程式碼註解的部份為目標物件的簡化操作。

沒有留言:

張貼留言