WPF 元素綁定


1.什么是數據綁定
數據綁定是一種關系,WPF程序從源對象中提取一些信息,並根據這些信息設置目標對象的屬性,目標屬性作為依賴項屬性。源對象可以是任何內容,可以是另一個wpf內容,甚至是自行創建的純數據對象。

 

2.簡單的單綁定

將一個元素綁定到另一個元素,第一個例子,是將將一個Slider控件和TextBlock控件綁定。ElementName表示源對象的名字,Path表示源元素的屬性。需要使用花括號括起來。

 <Grid>
        <Slider Name="sliderFontSize" Margin="3" Minimum="1" Maximum="40" Value="10"
                TickFrequency="1" TickPlacement="TopLeft">
        </Slider>
        <TextBlock Margin="10,39,10,62" Text="Simple Text" Name="lblSampleText"
                   FontSize="{Binding ElementName=sliderFontSize,Path=Value}"<!--Binding關鍵字將slider和textblock綁定-->
        </TextBlock>
 </Grid>

3.綁定模式

在單綁定的基礎上添加3個按鈕,對應特定的預設值,點擊按鈕,是字體變為設定的預設值大小。

    <Grid>
        <Slider Name="sliderFontSize" Margin="3" Minimum="1" Maximum="40" Value="10"
                TickFrequency="1" TickPlacement="TopLeft">
        </Slider>
        <TextBlock Margin="10,39,10,177" Text="Simple Text" Name="lblSampleText"
                   FontSize="{Binding ElementName=sliderFontSize,Path=Value}">
        </TextBlock>
        <Button x:Name="small" Content="Set to Small" HorizontalAlignment="Left" Margin="93,182,0,0" VerticalAlignment="Top" Width="97" Click="small_Click"/>
        <Button x:Name="normal" Content="Set to Normal" HorizontalAlignment="Left" Margin="203,182,0,0" VerticalAlignment="Top" Width="105" Click="normal_Click"/>
        <Button x:Name="large" Content="Set to Large" HorizontalAlignment="Left" Margin="321,182,0,0" VerticalAlignment="Top" Width="85" Click="large_Click"/>
    </Grid>

點Set to small會觸發click事件,執行以下代碼。將sliderfontsize的值設定為10,對應的textblock也會有相應的文字大小。

 private void small_Click(object sender, RoutedEventArgs e)
        {
            sliderFontSize.Value = 10;
            lblSampleText.FontSize= 10;//錯誤
        }

:不能設置textblock中lblSampleText的值,這樣只會改變文本框中的大小,並不能影響綁定過的slider的值。

雙向綁定(TwoWay):在這個例子中,也存在一種方式,強制在2個方向傳遞數值,從目標到源,從源到目標。方法是設置Binding的Mode屬性

 FontSize="{Binding ElementName=sliderFontSize,Path=Value,Mode=TwoWay}"

綁定模式共5種,見下表:

名稱 說明
OneWay 源變化,目標變化
TwoWay 源和目標互相影響
OneTime 最初根據源屬性值設置目標,其后所有操作不改變目標屬性
OneWayToSource 與OneWay相反,目標變化更新源
Default 即可雙向(用戶可設定如Textbox.text屬性)又可以單向

也可使用代碼創建綁定:

        Binding binding = new Binding();
        binding.Source = SliderFontSize;
        binding.Path = new PropertyPath("value");
        binding.Mode = BindingMode.TwoWay;
     lbSampleTextb.SetBinding(Textblock.FontSize,binding);

 

4.多綁定

可以是將多個源共同作用到一個目標對象上,也可以是一個源,影響多個目標對象。此處例子為,多個源作用到一個textblock對象上,影響textblock文本的顯示內容、大小

顏色3個屬性。

    <Grid Margin="5">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Slider Name="sliderFontSize" Margin="3" Minimum="1" Maximum="40" Value="10"></Slider>
        <TextBox Name="txtContent" Margin="3" Grid.Row="2">Sample Content</TextBox>
        <ListBox Margin="3" Grid.Row="3" Name="lstColors">
            <ListBoxItem Tag="Blue">Blue</ListBoxItem>
            <ListBoxItem Tag="DarkBlue">Dark Blue</ListBoxItem>
            <ListBoxItem Tag="LightBlue">Light Blue</ListBoxItem>
        </ListBox>
        <TextBlock Margin="3" Name="lblSampleText"
                   FontSize="{Binding ElementName=sliderFontSize,Path=Value}" Grid.Row="4"<!--d大小屬性和滑塊綁定-->
                   Text="{Binding ElementName=txtContent,Path=Text}"<!--內容和textbox綁定-->
                   Foreground="{Binding ElementName=lstColors,Path=SelectedItem.Tag}"<!--顏色和listbox綁定,在listbox中選擇顏色>
                   ></TextBlock>
    </Grid>

還可以通過改變綁定模式,將Binding.Mode改為TwoWay,雙向綁定具有極大的靈活性,使目標對象反過來影響源對象的屬性。


免責聲明!

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



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