數據綁定是 WPF 中非常重要的特性,它建立了 UI 元素與數據源之間的連接,使數據能夠在兩者之間自動同步。
綁定的兩種常見情況
- 綁定到元素上
將一個 UI 元素的屬性綁定到另一個 UI 元素的屬性上 <!-- 示例:將TextBox的Text屬性綁定到Slider的Value屬性 --> <Slider x:Name="slider" Minimum="0" Maximum="100" Value="50"/> <TextBox Text="{Binding ElementName=slider, Path=Value, StringFormat=F0}"/> - 綁定到非元素上
將 UI 元素綁定到數據對象(如 ViewModel、業務對象等) <!-- 示例:綁定到數據對象的屬性 --> <TextBox Text="{Binding UserName}"/> 後台需要設置 DataContext: this.DataContext = new UserViewModel(); // UserViewModel包含UserName屬性
五種綁定模式
- Default(默認模式)
- 根據目標屬性自動確定模式
- 多數屬性為 OneWay,可編輯控件(如 TextBox 的 Text)默認為 TwoWay
<TextBox Text="{Binding UserName}"/> <!-- 默認為TwoWay --> <TextBlock Text="{Binding UserName}"/> <!-- 默認為OneWay -->
- OneWay(單向綁定)
- 數據源變化時更新目標,但目標變化不影響數據源
<TextBlock Text="{Binding UserName, Mode=OneWay}"/>
- TwoWay(雙向綁定)
- 數據源變化更新目標,目標變化也更新數據源
<TextBox Text="{Binding UserName, Mode=TwoWay}"/>
- OneTime(一次性綁定)
- 只在初始時將數據源的值更新到目標,之後不再同步
<TextBlock Text="{Binding InitialValue, Mode=OneTime}"/>
- OneWayToSource(單向到源)
- 目標變化時更新數據源,但數據源變化不影響目標
<TextBox Text="{Binding FilterText, Mode=OneWayToSource}"/>
綁定的補充屬性
- UpdateSourceTrigger:指定何時更新數據源 <!-- 失去焦點時更新數據源 --> <TextBox Text="{Binding UserName, UpdateSourceTrigger=LostFocus}"/>
- StringFormat:格式化綁定的字符串 <TextBlock Text="{Binding Price, StringFormat=C}"/> <!-- 貨幣格式 -->
- FallbackValue:綁定失敗時顯示的值 <TextBlock Text="{Binding UnknownProperty, FallbackValue='N/A'}"/>
通過合理使用不同的綁定模式,可以構建響應式強、維護性好的 WPF 應用程序,特別是結合 MVVM 模式時能發揮最大威力。