当前位置: 首页 > article >正文

WPF:Binding数据绑定

WPF(Windows Presentation Foundation)是微软推出的一种用于构建Windows客户端应用程序的UI框架。数据绑定是WPF中一个强大的功能,它允许UI元素与数据源之间建立连接,使得UI能够自动显示数据源中的数据,并且当数据源中的数据发生变化时,UI能够自动更新。

以下是WPF数据绑定的一些基本概念和步骤:

  1. 数据源(Data Source):这是你要绑定的数据对象。它可以是一个简单的对象、集合、XML数据等。

  2. 绑定目标(Binding Target):这是UI元素的属性,你希望它显示数据源中的数据。

  3. 绑定表达式(Binding Expression):这是连接数据源和绑定目标的表达式。

  4. DataContext:这是一个特殊的属性,它允许你将数据源传递给窗口或控件,而无需显式设置每个控件的绑定。

  5. Binding:这是一个复杂的对象,它定义了数据绑定的所有细节,包括数据源、路径、转换器等。

  6. 数据转换器(Converter):这是一个对象,它允许你在数据源和绑定目标之间转换数据格式。

  7. 更新源触发(UpdateSourceTrigger):这个属性定义了何时将绑定目标的更改写回数据源。

  8. 数据绑定模式(Mode):可以是单向(OneWay)、双向(TwoWay)、单向到源(OneWayToSource)或默认(Default)。

  9. 路径(Path):这是数据源中数据的路径,它告诉WPF如何访问数据。

  10. 错误处理:当数据绑定失败时,你可以设置错误处理逻辑。

数据绑定的基本步骤通常包括:

  • 定义数据源,这可以是代码中的一个对象,也可以是XAML中定义的资源。
  • 设置UI元素的DataContext,这样它就知道去哪里查找数据。
  • 使用Binding表达式将UI元素的属性绑定到数据源的属性。

下面是一个简单的XAML示例,演示了如何将一个文本框的Text属性绑定到一个名为UserName的属性:

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBox x:Name="txtUserName" />
        <TextBlock Text="{Binding ElementName=txtUserName, Path=Text}" />
    </Grid>
</Window>

在这个例子中,TextBlockText属性被绑定到了TextBoxText属性。当TextBox的内容改变时,TextBlock也会显示相同的内容。

WPF中的绑定Binding常用的属性,并使用 

 

  1.  Path

    • 说明:指定绑定目标属性要绑定的数据源属性的路径。
    • 使用
      <TextBox Text="{Binding Path=PropertyName}" />
      或者在代码中:
      Binding binding = new Binding("PropertyName");
      textBox.SetBinding(TextBox.TextProperty, binding);
  2. ElementName

    • 说明:获取或设置要用作绑定源对象的元素的名称。。
    • 使用
      <TextBox Name="txtBindingSource" />
      <TextBox Text="{Binding ElementName=txtBindingSource,Path=PropertyName}" />
  3. Source

    • 说明:指定数据源对象。
    • 使用
      <Window.Resources>
          <local:DataSource x:Key="dataContext" />
      </Window.Resources>
      <TextBox Text="{Binding Source={StaticResource dataContext}, Path=PropertyName}" />
      或者在代码中:
      var source = new DataSource();
      Binding binding = new Binding("PropertyName") { Source = source };
      textBox.SetBinding(TextBox.TextProperty, binding);
  4. Mode

    • 说明:指定绑定模式,可以是OneWay(数据源到目标)、TwoWay(双向)、OneTime(只绑定一次)或OneWayToSource(目标到数据源)。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, Mode=TwoWay}" />
  5. UpdateSourceTrigger

    • 说明:指定何时将绑定目标的更改写回数据源。可以是PropertyChanged(属性改变时)、LostFocus(失去焦点时)、Explicit(需要手动更新)。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, UpdateSourceTrigger=PropertyChanged}" />
  6. Converter

    • 说明:指定一个转换器,用于在数据源和绑定目标之间转换数据。
    • 使用
      <Window.Resources>
          <local:MyConverter x:Key="myConverter" />
      </Window.Resources>
      <TextBox Text="{Binding Path=PropertyName, Converter={StaticResource myConverter}}" />
      或者在代码中:
      Binding binding = new Binding("PropertyName") { Converter = new MyConverter() };
      textBox.SetBinding(TextBox.TextProperty, binding);
  7. StringFormat

    • 说明:指定一个字符串格式,用于格式化绑定的值。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, StringFormat={}{0:0.00}}" />
      这会将数字格式化为两位小数。
  8. FallbackValue

    • 说明:指定当绑定失败时使用的后备值。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, FallbackValue='Not available'}" />
  9. TargetNullValue

    • 说明:指定当目标属性为null时使用的值。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, TargetNullValue='Not available'}" />
  10. NotifyOnValidationError

    • 说明:指定是否在验证失败时通知绑定系统。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, NotifyOnValidationError=true}" />
  11. ValidatesOnDataErrors

    • 说明:指定是否在数据错误时进行验证。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, ValidatesOnDataErrors=true}" />

http://www.kler.cn/news/364731.html

相关文章:

  • 基于SpringBoot的“高校校园点餐系统”的设计与实现(源码+数据库+文档+PPT)
  • 公司章程拟定,定制公司章程
  • Modbus TCP报错:Response length is only 0 bytes
  • 家用wifi的ip地址固定吗?换wifi就是换ip地址吗
  • eachers中的树形图在点击其中某个子节点时关闭其他同级子节点
  • Qt 断开信号槽的方式
  • 接地电阻柜的生产流程
  • java项目之电影评论网站(springboot)
  • 【linux】centos7 安装openjdk-17
  • 笔记:WPF中MarkupExtension使用的IServiceProvider参数都有哪些
  • 星海智算:【王宝宝-ComfyUI-SD3】无需部署一键启动
  • ARM学习(33)英飞凌(infineon)PSOC 6 板子学习
  • 回归、分类模型的评估指标
  • G1(Garbage First)垃圾回收实战
  • 木木模拟器 MuMuPlayer Pro for Mac 下载安装详细教程(无需激活)
  • 人工智能_机器学习100_PCA数据降维算法_协方差和散度矩阵_深入理解_分析_协方差和散度矩阵计算过程---人工智能工作笔记0225
  • Kubernetes集群搭建容器云需要几台服务器?
  • 两个mp3音频怎么合成一个?音频合成的多个好用方法教程
  • python+大数据+基于热门视频的数据分析研究【内含源码+文档+部署教程】
  • 小程序云数据库通用操作
  • MySQL的group_concat函数:将分组中的多个值连接成一个字符串的聚合函数
  • Java安全——AES(对称加密)和 RSA(非对称加密)的实现
  • Failed to fetch dynamically imported module
  • react18中的jsx 底层渲染机制相关原理
  • 基于SpringBoot的“高校校园点餐系统”的设计与实现(源码+数据库+文档+PPT)
  • 任务间通信(1)