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.mzph.cn/pingmian/57640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NewStarCTF 2023 公开赛道 Web week1-week2

目录 week1 泄漏的秘密 Begin of Upload Begin of HTTP ErrorFlask ​Begin of PHP R!C!E! EasyLogin ​week2 游戏高手 include 0。0 ez_sql ​Unserialize&#xff1f; Upload again! R!!C!!E!! week1 泄漏的秘密 使用ctf-scan.py&#xff08;https://gith…

上传Gitee仓库流程图

推荐一个流程图工具 登录 | ProcessOnProcessOn是一个在线协作绘图平台&#xff0c;为用户提供强大、易用的作图工具&#xff01;支持在线创作流程图、思维导图、组织结构图、网络拓扑图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。同时依托于互联网实现了人与人之间的…

Qt中使用线程之QConcurrent

QConcurrent可以实现并发&#xff0c;好处是我们可以不用单独写一个类了&#xff0c;直接在类里面定义任务函数&#xff0c;然后使用QtConcurrent::run在单独的线程里执行一个任务 1、定义一个任务函数 2、定义1个QFutureWatcher的对象&#xff0c;使用QFutureWatcher来监测任…

用Python将Office文档(Word、Excel、PowerPoint)批量转换为PDF

在处理不同格式的Office文档&#xff08;如Word、Excel和PowerPoint&#xff09;时&#xff0c;将其转换为PDF格式是常见的需求。这种转换不仅确保了文件在不同设备和操作系统间的一致性显示&#xff0c;而且有助于保护原始内容不被轻易修改&#xff0c;非常适合于正式报告、提…

Redisson(三)应用场景及demo

一、基本的存储与查询 分布式环境下&#xff0c;为了方便多个进程之间的数据共享&#xff0c;可以使用RedissonClient的分布式集合类型&#xff0c;如List、Set、SortedSet等。 1、demo <parent><groupId>org.springframework.boot</groupId><artifact…

【主机漏洞扫描常见修复方案】:Tomcat安全(机房对外Web服务扫描)

文章目录 引言I SSL/TLS Not ImplementedTomcat 服务器 SSL 证书安装部署(JKS 格式)Tomcat 服务器 SSL 证书安装部署(PFX 格式)HTTP 自动跳转 HTTPS 的安全配置(可选)修复SSL证书版本低II 主机漏洞扫描常见修复方案Apache JServ protocol serviceSlow HTTP DEnial of Ser…

多楼层智能穿梭:转运机器人助力制造业转型升级

针对当前喷砂产品人工转运存在的劳动强度大、效率低、安全隐患多等问题&#xff0c;本方案提出设计一套高效、安全、多楼层自动转运系统&#xff0c;采用潜伏式转运机器人结合电梯与升降平台技术&#xff0c;实现平面类、立柱类及小工件类喷砂产品的自动化、智能化转运。 项目需…

Docker 与 Yocto

Yocto项目为什么需要Docker Yocto 项目并不直接依赖 Docker&#xff0c;但在某些情况下使用 Docker 可以为 Yocto 项目提供以下具体且实际的好处&#xff1a; 1. 环境一致性&#xff1a; Yocto 构建需要一个稳定且一致的开发环境。不同的 Linux 发行版可能会有不同的库版本、…

深入探索电能消耗数据:基于机器学习的分析与洞察

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Java | Leetcode Java题解之第504题七进制数

题目&#xff1a; 题解&#xff1a; class Solution {public String convertToBase7(int num) {if (num 0) {return "0";}boolean negative num < 0;num Math.abs(num);StringBuffer digits new StringBuffer();while (num > 0) {digits.append(num % 7);…

【数据结构】包装类简单认识泛型-Java

包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个基本类型都给了一个包装类型 基本数据类型和对应的包装类 基本数据类型包装类ByteByteshortShortint Integer longLongfloatFloatdoubleDoublec…

wordcloud 字体报错

wordcloud 字体报错 词云库报错&#xff1a;Only supported for TrueType fonts字体文件问题pillow版本的问题wordcloud版本问题&#xff08;我的最终解决方案&#xff09; 词云库报错&#xff1a;Only supported for TrueType fonts 字体文件问题 解决方法 写绝对路径 &…

【故障解决】麒麟系统2403用户帮助手册点击无反应的解决方法

往期好文&#xff1a;【系统配置】命令行修改统信UOS的grub启动延时 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何解决麒麟系统2403版本中用户帮助手册点击无反应问题的文章。很多使用麒麟系统的小伙伴可能遇到过点击“用户帮助手册”后没有任何响应的情况…

【Linux学习】(3)Linux的基本指令操作

前言 配置Xshell登录远程服务器Linux的基本指令——man、cp、mv、alias&which、cat&more&less、head&tail、date、cal、find、grep、zip&tar、bc、unameLinux常用热键 一、配置Xshell登录远程服务器 以前我们登录使用指令&#xff1a; ssh 用户名你的公网…

gorm.io/sharding改造:赋能单表,灵活支持多分表策略(下)

背景 分表组件改造的背景&#xff0c;我在这篇文章《gorm.io/sharding改造&#xff1a;赋能单表&#xff0c;灵活支持多分表策略&#xff08;上&#xff09;》中已经做了详细的介绍——这个组件不支持单表多个分表策略&#xff0c;为了突破这个限制做的改造。 在上一篇文章中&…

机器学习基础:算法如何让 AI 自我学习

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 AI工具集1&#xff1a;大厂AI工具【共23款…

vue3+vue-baidu-map-3x 实现地图定位

文档地址&#xff1a;一个是2一个是3 https://dafrok.github.io/vue-baidu-map/#/zh/index vue-baidu-map-3x 1.首先要到百度地图开放平台上建一个账号&#xff0c;如果有百度账号可以直接登录百度地图-百万开发者首选的地图服务商,提供专属的行业解决方案 2.点击控制台&am…

ThreadLocal内存泄漏面试题

一、ThreadLocal内部结构 首先更好的说明ThreadLocal内存泄露的场景&#xff0c;以及具体的原因&#xff0c;先来了解下ThreadLocal的内部结构&#xff0c;如图1所示。 可以看到&#xff0c;ThreadLocal对象是存储在每个Thread线程内部的ThreadLocalMap中的&#xff0c;并且在…

行列式-常山赵子龙

终于知道这类题怎么写了 两个条件都要用到 要计算&#xff0c;减少直觉

【加密系统】华企盾DSC服务台提示:请升级服务器,否则可能导致客户端退回到旧服务器的版本

华企盾DSC服务台提示&#xff1a;请升级服务器&#xff0c;否则可能导致客户端退回到旧服务器的版本 产生的原因&#xff1a;控制台版本比服务器高导致控制台出现报错 解决方案 方法&#xff1a;将控制台回退到原来的使用版本&#xff0c;在控制台负载均衡查看连接该服务器各个…