【WPF】中Binding的应用
在 WPF (Windows Presentation Foundation) 中,数据绑定是一种强大的机制,它允许你将用户界面(UI)元素的属性与各种数据源关联起来。这种关联可以是单向的、双向的或一次性的。WPF 的数据绑定支持多种数据源,包括普通对象、集合、ADO.NET 数据集、XML 数据等。
常见的 Binding 属性及其含义
在 WPF 中,Binding 标记扩展用于创建数据绑定。一个完整的 Binding 可以包含多个属性,每个属性都有其特定的用途。下面是一些常见的 Binding 属性及其含义:
-
Path:
- 说明:指定要绑定到的数据源中的属性路径。
- 例子:
{Binding Path=UserName}绑定到名为UserName的属性。
-
Source:
- 说明:指定数据绑定的源对象。如果未设置,则默认使用
DataContext。 - 例子:
{Binding Source={StaticResource myDataSource}, Path=Title}使用资源字典中的myDataSource作为源。
- 说明:指定数据绑定的源对象。如果未设置,则默认使用
-
ElementName:
- 说明:通过元素名称来指定数据源。通常用于同一 XAML 文件内的控件之间的绑定。
- 例子:
{Binding ElementName=myTextBox, Path=Text}绑定到名为myTextBox的TextBox的Text属性。
-
RelativeSource:
- 说明:允许你基于当前元素的位置来查找数据源。常用于父子关系或祖先-后代关系。这里绑定了到当前元素最近的一个
Window祖先的DataContext中的UserName属性。 - <TextBox Text="{Binding Path=Email, NotifyOnValidationError=True, ValidatesOnDataErrors=True}"/>
- 说明:允许你基于当前元素的位置来查找数据源。常用于父子关系或祖先-后代关系。这里绑定了到当前元素最近的一个
-
Mode:
- 说明:定义了数据流的方向。可以是
OneWay,TwoWay,OneTime或OneWayToSource。 - 例子:
{Binding Path=Age, Mode=TwoWay}表示双向绑定,即 UI 和数据源之间都可以更新值。
- 说明:定义了数据流的方向。可以是
-
UpdateSourceTrigger:
- 说明:控制何时将更改从目标属性(通常是 UI 元素)更新回源属性(数据源)。对于
TextBox.Text等属性,默认是LostFocus,但可以通过设置为PropertyChanged来实现即时更新。 - 例子:
{Binding Path=Description, UpdateSourceTrigger=PropertyChanged}
- 说明:控制何时将更改从目标属性(通常是 UI 元素)更新回源属性(数据源)。对于
-
Converter:
- 说明:允许你在绑定过程中转换数据。需要实现
IValueConverter接口。 - 例子:
{Binding Path=Temperature, Converter={StaticResource celsiusToFahrenheitConverter}}
- 说明:允许你在绑定过程中转换数据。需要实现
-
FallbackValue:
- 说明:当绑定失败时使用的备用值。
- 例子:
{Binding Path=SomeProperty, FallbackValue=Default}如果SomeProperty不存在,则使用 "Default" 作为值。
-
TargetNullValue:
- 说明:当源属性为
null时,使用该值替换。 - 例子:
{Binding Path=OptionalValue, TargetNullValue=0}如果OptionalValue为null,则显示 0。
- 说明:当源属性为
-
StringFormat:
- 说明:用于格式化字符串输出。
- 例子:
{Binding Path=Price, StringFormat=C}将价格格式化为货币形式。
-
NotifyOnValidationError 和 ValidatesOnDataErrors:
- 说明:这些属性用于验证和错误处理。
NotifyOnValidationError控制是否通知验证错误,而ValidatesOnDataErrors则控制是否启用基于数据错误的通知。 -
<TextBox Text="{Binding Path=Email, NotifyOnValidationError=True, ValidatesOnDataErrors=True}"/>
- 说明:这些属性用于验证和错误处理。
-
- 说明:仅对
UpdateSourceTrigger=PropertyChanged有效,指定了延迟时间,以便在最终更新源之前等待一段时间,防止频繁更新。 - 例子:
{Binding Path=SearchTerm, UpdateSourceTrigger=PropertyChanged, Delay=500}
- 说明:仅对
这些参数可以根据你的具体需求进行组合使用,以实现复杂的数据绑定逻辑。WPF 的数据绑定机制非常灵活,能够满足大多数应用场景下的需求。
常见的Binding 数据绑定应用场景
1. 简单属性绑定
这是最常见的数据绑定形式,其中 UI 元素的一个属性被绑定到数据源的一个属性上。例如,将一个 TextBox 的 Text 属性绑定到视图模型中的一个属性。
<TextBox Text="{Binding Path=UserName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
2. 集合绑定
当需要显示一系列数据时,通常会使用集合绑定。这可以通过 ItemsControl 或其派生类(如 ListBox, ComboBox, ListView 等)来实现。通常,这些控件的数据源会被设置为一个实现了 IEnumerable 的集合。
<ListBox ItemsSource="{Binding Users}"><ListBox.ItemTemplate><DataTemplate><TextBlock Text="{Binding Name}"/></DataTemplate></ListBox.ItemTemplate>
</ListBox>
3. 样式和触发器
你可以根据数据值的变化来动态地改变 UI 的样式。通过使用 DataTrigger 和 Style,你可以定义当某个数据属性满足特定条件时应用的样式。
<Style TargetType="Button"><Setter Property="Background" Value="LightGray"/><Style.Triggers><DataTrigger Binding="{Binding IsEnabled}" Value="False"><Setter Property="Background" Value="Gray"/></DataTrigger></Style.Triggers>
</Style>
4. 转换器
有时你需要对绑定的数据进行转换,这时可以使用 IValueConverter 接口实现自定义转换器。
<TextBox Text="{Binding Path=DateOfBirth, Converter={StaticResource dateToStringConverter}}"/>
5. 相对源绑定
当你想基于当前元素相对于其他元素的位置来进行绑定时,可以使用 RelativeSource。
<Border BorderBrush="Black" BorderThickness="1"><TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=Title}"/>
</Border>
6. 多重绑定
如果你需要从多个数据源获取信息并将其组合成单一输出,可以使用 MultiBinding 和 IMultiValueConverter。
<TextBlock><TextBlock.Text><MultiBinding Converter="{StaticResource fullNameConverter}"><Binding Path="FirstName"/><Binding Path="LastName"/></MultiBinding></TextBlock.Text>
</TextBlock>
7. 命令绑定
WPF 提供了命令绑定,允许你将 UI 动作(如按钮点击)绑定到逻辑代码中执行的方法。这通常是通过 ICommand 接口和相应的命令实现来完成的。
<Button Command="{Binding SaveCommand}" Content="Save"/>
以上就是一些 WPF 中数据绑定的应用示例。通过这些技术,你可以创建出更加灵活、可维护且响应式的用户界面。
相关文章:
【WPF】中Binding的应用
在 WPF (Windows Presentation Foundation) 中,数据绑定是一种强大的机制,它允许你将用户界面(UI)元素的属性与各种数据源关联起来。这种关联可以是单向的、双向的或一次性的。WPF 的数据绑定支持多种数据源,包括普通对…...
华为OD机试2024年真题(基站维修工程师)
基站维修工程师(200分) 小王是一名基站维护工程师,负责某区域的基站维护。 某地方有n个基站(1<n<10),已知各基站之间的距离s(0<s<500),并且基站x到基站y的距离,与基站y到基站x的距离并不一定会…...
在MySQL中为啥引入批量键访问(Batch Key Access, BKA)
批量键访问(Batch Key Access, BKA) 是 MySQL 在某些情况下用于优化 JOIN 操作的一种技术,特别是在通过索引进行 JOIN 时,它能有效减少查询的随机 I/O。批量键访问优化通过将一批主键或索引键一次性发送给存储引擎来查找匹配的行&…...
912.排序数组(归并排序)
目录 题目解法初始数组1. 分解阶段2. 合并阶段结果 为什么要创建长整型ll mid l ((r - l) >> 1);其中的>>是什么意思 题目 给你一个整数数组 nums,请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O…...
使用 cmake 在 x86 系统中为 arm 系统交叉编译程序
原理: 在 x86 系统里使用交叉编译工具链(arm 版 gcc/g)编译程序,然后放在 arm 系统里运行。 arm 版本 使用 lscpu 查看 cpu 架构 版本说明armv732 bitarmv8/arrch6464 bit 安装交叉编译工具链 # 针对 armv7 sudo apt install…...
软考(网工)——网络规划设计
文章目录 🕐综合布线1️⃣结构化布线系统2️⃣综合布线六大子系统3️⃣综合布线物理结构图 🕑网络分析与设计1️⃣网络规划设计模型2️⃣网络流量分析3️⃣网络安全技术措施表4️⃣技术评价 🕒网络结构与功能1️⃣局域网结构类型2️⃣三层架构…...
即插即用特征融合模块,即用即涨点!
特征融合(Feature Fusion)是深度学习中的一种重要技术,它可以帮助模型更好地理解数据的内在结构和规律,提高模型的性能和泛化能力。 另外,特征融合还可以提高模型的分类准确率,减少过拟合风险,…...
蓝桥算法双周赛 第 19 场 小白入门赛
打开石门 只要有相连的一样字母就可以消成一个 string s; int ans;void solve() {cin >> s;int len 0;for (int i 0;i < s.size();i ){if (s[i] L) len ;else //遇到Q{ans (len ? 1 : 0); //消除累计的Llen 0;ans ;//遇到Q}}//QLLLL时,最后遇不到Q让累计的L消…...
Cursor零基础小白教程系列「进阶」 - Cursor 智能代码补全详解(Tab)
最适合小白零基础的Cursor教程 网站lookai.top相同作者,最新文章会在网站更新,欢迎收藏书签 Cursor 智能代码补全详解(Tab) 概述 Cursor的智能代码补全,也就是快捷键Tab,是其最强大和独特的AI辅助编程工具之一。本教程将详细介绍…...
数据结构《顺序表》
文章目录 前言一、什么是顺序表?1.1 顺序表的概念1.2 顺序表的建立 二、MyArrayList的实现三、顺序表的方法四、关于顺序表的例子总结 前言 提示:这里涉及到的ArrayList类是一个泛型类,同时后面的很多内容都会涉及到泛型,如果不了…...
视频分享网站毕业设计基于SpringBootSSM框架
目录 1.摘要 2.引言 2.1 研究意义 3 功能描述 3.1功能图展示 3.2非功能需求 4. 需求分析 4.1前端技术 4.2后端技术 4.3视频处理技术 4.4内容分发网络(CDN) 4.5其他关键技术 计算机毕业设计/springboot/javaWEB/J2EE/MYSQL数据库/vue前后…...
Python多进程学习与使用:全面指南
Python多进程学习与使用:全面指南 目录 引言什么是多进程?为什么使用多进程?Python中的多进程模块:multiprocessing创建进程的基本方法进程间通信进程池多进程与多线程的比较常见问题和解决方案最佳实践和性能优化实战项目&…...
HTTP Proxy环境下部署Microsoft Entra Connect和Health Agents
在企业环境中,时常需要通过使用HTTP Proxy访问Internet,在使用HTTP Proxy访问Internet的环境中部署Microsoft Entra Connect和Microsoft Entra Connect Health Agents可能会遇到一些额外的配置步骤,以便这些服务能够正常连接到Internet。 一…...
基于单片机的 OLED 显示终端设计分析与研究
摘要: 我国的经济发展速度正在不断加快,经济体制也在经历着一系列的改革,工业发展也正是受到了它的影响,逐步发生变化。在这样的背景下,传统的 LCD 显示技术,逐渐被显示效果更好,功耗更低的 OLED 代替。本文主要介绍了基于单片机的 OLED 显示终端设计,该设计目前具有很…...
基于Multisim压力报警器电路设计(含仿真和报告)
【全套资料.zip】压力报警器电路设计Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 压力报警器包括:压力检测、信号放大、声光报警当电路检测到系统压力正常时,不进行声、光报…...
基于Springboot的在线考试与学习交流平台的设计与实现
基于Springboot的在线考试与学习交流平台 开发语言:Java 框架:springboot JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:idea 源码获取:https://download.csdn.net/downlo…...
“避免序列化灾难:掌握实现 Serializable 的真相!(二)”
文章目录 一、什么是序列化?二、Serializable 是如何起作用的?三、为什么不自动序列化所有对象?四、Java 序列化的底层原理序列化的核心步骤: 五、反序列化的原理六、总结:为什么必须实现 Serializable 才能序列化&…...
中国工商银行智能运维体系建设
随着信息技术的快速发展,分布式架构已经成为主流的系统架构形式。基于分布式架构的系统具有资源利用率高、可扩展性好等优点,已广泛应用于各类企业信息系统之中。分布式监控系统应运而生,它通过在各个节点部署轻量级代理程序,实现对分布式系统的监控数据采集和分析,有效地解决…...
如何将logism电路转为verilog(一)
好长时间没写博客了 下文中提到的文件可在此仓库下载:https://github.com/deadfffool/HUST-Computer-Organization-Big-Homework/tree/main 在转换为verilog之前,需要对logisim电路做以下几点改动: 首先将下载的logisim_change.jar放在与log…...
【论文笔记】X-Former: Unifying Contrastive and Reconstruction Learning for MLLMs
🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: X-Former: Unifying Contr…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
