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 模式时能发挥最大威力。

相关推荐
Scout-leaf2 天前
WPF新手村教程(三)—— 路由事件
c#·wpf
用户298698530142 天前
程序员效率工具:Spire.Doc如何助你一键搞定Word表格排版
后端·c#·.net
埃博拉酱3 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
mudtools3 天前
搭建一套.net下能落地的飞书考勤系统
后端·c#·.net
玩泥巴的4 天前
搭建一套.net下能落地的飞书考勤系统
c#·.net·二次开发·飞书
唐宋元明清21884 天前
.NET 本地Db数据库-技术方案选型
windows·c#
lindexi4 天前
dotnet DirectX 通过可等待交换链降低输入渲染延迟
c#·directx·d2d·direct2d·vortice
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
tryCbest4 天前
Windows环境下配置pip镜像源
windows·pip
呉師傅4 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑