1. 程式人生 > >WPF資料繫結-用XAML繫結

WPF資料繫結-用XAML繫結

用XAML繫結
        
WPF元素不僅是資料繫結的目標,它還可以是繫結的源。

可以把一個WPF元素的源屬性繫結到另一個WPF元素的目標屬性上。

ElementName指向繫結源,Path指向源屬性
此處CheckBox為繫結源,IsChecked為源屬性,Label為目標

        <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Vertical">
            <CheckBox Name="checkBox" Content="CheckBox"/>
            <Label Name="lb" Content="{Binding ElementName=checkBox,Path=IsChecked}"/>
        </StackPanel>


除了用XAML程式碼定義繫結資訊之外,還可以在隱藏程式碼中使用Binding元資料擴充套件來定義。

在隱藏程式碼中,必須新建一個Binding物件,並設定Path和Source屬性。必須把Sourch屬性設定為源物件,把Path屬性設定為一個ProperyPath例項,它用源物件的屬性名進行初始化。對於派生子FrameworkElement的控制元件,可以呼叫SetBindind()方法來定義繫結。

        <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Vertical">
            <CheckBox Name="checkBox" Content="CheckBox"/>
            <Label Name="lb" Content=""/>
        </StackPanel>
        private void Init()
        {
            Binding binding = new Binding();
            binding.Source = checkBox;
            binding.Path = new PropertyPath("IsChecked");

            lb.SetBinding(Label.ContentProperty, binding);
        }


對於以下ScaleTransfrom不派生子FrameworkElement,而派生自Freezable基類。使用輔助類BindingOperations可以繫結這類控制元件。

BindingOperations類的SetBinding()方法需要一個DependencyObject,在本例中是ScaleTransform例項。對於第二個和第三個引數,SetBinding()方法還需要繫結目標的dependency屬性和Binding物件。

        <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Vertical">
            <StackPanel.LayoutTransform>
                <ScaleTransform x:Name="scaleTrans"/>
            </StackPanel.LayoutTransform>
            <CheckBox Name="checkBox" Content="CheckBox"/>
            <Label Name="lb" Content="文字"/>
        </StackPanel>
        <Slider HorizontalAlignment="Left" VerticalAlignment="Bottom" x:Name="slider" Value="1" Minimum="0.4" Maximum="3" Width="150"/>

        private void Init()
        {
            Binding binding = new Binding();
            binding.Source = slider;
            binding.Path = new PropertyPath("Value");

            BindingOperations.SetBinding(scaleTrans, ScaleTransform.ScaleXProperty, binding);
            BindingOperations.SetBinding(scaleTrans, ScaleTransform.ScaleYProperty, binding);
        }