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

相关推荐
?re?ta?rd?ed?12 小时前
C++11新特性,{}与左值
c++·windows
吃一碗粉只付一碗钱14 小时前
10-令牌里的用户主键不要明文
服务器·数据库·sql·sqlserver·c#
必须得开心呀15 小时前
windows10系统任务栏图标消失修复
windows
zl_dfq15 小时前
Windows 下 UDP 套接字编程指南
网络·windows·udp
学习论之费曼学习法16 小时前
无人值守AI内容矩阵实战(10):Windows 上让 Python 进程 7×24 活着
人工智能·windows·python·矩阵·powershell·进程守护
少年的范儿16 小时前
Windows 安装 MySQL 8.4 教程(ZIP 解压版):配置 my.ini、初始化数据库与启动服务
数据库·windows·mysql
胖纸不争17 小时前
EnergyStarZ:让 Windows 后台进程给前台让路的能效管理器(v1.2 发布)
windows·性能优化·c#·win32·ef core
影寂ldy18 小时前
WPF导航窗体+Page页面跳转 知识点整理
wpf
曹牧18 小时前
C#:The operation has timed out
开发语言·c#
He BianGu18 小时前
【WPF-Control教程】IOC 依赖注入
c#·wpf·wpf-control