数据绑定是 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 模式时能发挥最大威力。