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,雙向綁定具有極大的靈活性,使目標對象反過來影響源對象的屬性。

