WPF 数据绑定详解

数据绑定是 WPF 中非常重要的特性,它建立了 UI 元素与数据源之间的连接,使数据能够在两者之间自动同步。

绑定的两种常见情况
  1. 绑定到元素上

    将一个 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}"/>
  2. 绑定到非元素上

    将 UI 元素绑定到数据对象(如 ViewModel、业务对象等)

    复制代码
    <!-- 示例:绑定到数据对象的属性 -->
    <TextBox Text="{Binding UserName}"/>

    后台需要设置 DataContext:

    复制代码
    this.DataContext = new UserViewModel(); // UserViewModel包含UserName属性
五种绑定模式
  1. Default(默认模式)

    • 根据目标属性自动确定模式

    • 多数属性为 OneWay,可编辑控件(如 TextBox 的 Text)默认为 TwoWay

    复制代码
    <TextBox Text="{Binding UserName}"/> <!-- 默认为TwoWay -->
    <TextBlock Text="{Binding UserName}"/> <!-- 默认为OneWay -->
  2. OneWay(单向绑定)

    • 数据源变化时更新目标,但目标变化不影响数据源
    复制代码
    <TextBlock Text="{Binding UserName, Mode=OneWay}"/>
  3. TwoWay(双向绑定)

    • 数据源变化更新目标,目标变化也更新数据源
    复制代码
    <TextBox Text="{Binding UserName, Mode=TwoWay}"/>
  4. OneTime(一次性绑定)

    • 只在初始时将数据源的值更新到目标,之后不再同步
    复制代码
    <TextBlock Text="{Binding InitialValue, Mode=OneTime}"/>
  5. 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 模式时能发挥最大威力。

相关推荐
q***01651 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
Macbethad2 小时前
使用WPF编写一个Ethercat主站的程序
wpf
hez20105 小时前
TypedSql:在 C# 类型系统上实现一个 SQL 查询引擎
c#·.net·.net core·compiler
难搞靓仔5 小时前
WPF 弹出窗体Popup
wpf·popup
世洋Blog6 小时前
利用<<左移运算符优雅的设计游戏能力的任意组合和判断
游戏·unity·c#
曹牧6 小时前
C#中,#region和#endregion
开发语言·c#
Neur0toxin6 小时前
入侵排查_2025/11/23
linux·windows·应急响应
Macbethad6 小时前
使用WPF编写一个MODBUSTCP通信的程序
wpf
unicrom_深圳市由你创科技7 小时前
Avalonia.WPF 跨平台图表的使用
wpf
czhc11400756637 小时前
c# 1121 构造方法
java·javascript·c#