深入解析:【笔记】在WPF中Binding里的详细功能介绍
2025-10-02 09:32 tlnshuju 阅读(0) 评论(0) 收藏 举报以下内容介绍 WPF 中 Binding 的核心概念、常用功能点、使用方式,并附文档链接。
一、Binding 概述
- 作用:将目标属性(DependencyProperty)与数据源属性建立连接,随数据变化自动更新 UI,或反向更新数据。
- 数据源查找:Binding.Source > Binding.ElementName > Binding.RelativeSource > DataContext(沿视觉树继承)。
- 典型能力:绑定模式、更新时机、路径语法、格式化与空值处理、转换器、相对/元素绑定、多值/优先级绑定、校验与诊断、异步绑定等。
二、常用功能点
- 绑定模式 Mode:OneWay、TwoWay、OneTime、OneWayToSource、Default。
- 更新时机 UpdateSourceTrigger:PropertyChanged、LostFocus、Explicit;可配合 Delay 节流文本输入。
- 路径 Path:支持子属性、索引器、附加属性路径。
- 格式与空值:StringFormat、TargetNullValue、FallbackValue。
- 转换器:Converter、ConverterParameter、ConverterCulture;多值用 MultiBinding+IMultiValueConverter 或 MultiBinding.StringFormat。
- 源定位:Source、ElementName、RelativeSource(AncestorType、TemplatedParent、Self 等)。
- 多值与优先级:MultiBinding、PriorityBinding。
- 校验与错误 UI:ValidatesOnDataErrors、ValidatesOnExceptions、ValidatesOnNotifyDataErrors、ValidationRules、BindingGroup。
- 诊断:diag:PresentationTraceSources.TraceLevel 输出绑定日志。
- 其他:IsAsync 异步获取、NotifyOnTargetUpdated/SourceUpdated 事件。
三、使用方式
- XAML:演示 TwoWay、格式化/空值、ElementName、RelativeSource、MultiBinding、PriorityBinding、可见性转换、诊断日志等
<UserControl x:Class="H.Test.DataGrid.UserControl1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase">
<UserControl.Resources><BooleanToVisibilityConverter x:Key="BoolToVis"/>
</UserControl.Resources><StackPanel Margin="12" Orientation="Vertical" Spacing="8"><!-- TwoWay + UpdateSourceTrigger + Delay --><TextBox PlaceholderText="输入名(300ms 节流)"Text="{Binding FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Delay=300}"/><!-- StringFormat / TargetNullValue / FallbackValue --><TextBlock Text="{Binding Age, StringFormat=年龄:{0} 岁}"/><TextBlock Text="{Binding NonExist, TargetNullValue=空值替代, FallbackValue=绑定失败}"/><!-- 元素名绑定 ElementName --><Slider x:Name="S" Minimum="0" Maximum="100" Value="42"/><TextBlock Text="{Binding ElementName=S, Path=Value, StringFormat=滑块:{0:F0}}"/><!-- 相对源绑定 RelativeSource 到祖先 --><TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=ActualWidth,StringFormat=控件宽:{0:F0}}"/><!-- MultiBinding(字符串格式拼接多个源) --><TextBlock><TextBlock.Text><MultiBinding StringFormat="姓名:{0} {1}"><Binding Path="FirstName"/><Binding Path="LastName"/></MultiBinding></TextBlock.Text></TextBlock><!-- PriorityBinding:优先取第一个可用值 --><TextBlock><TextBlock.Text><PriorityBinding FallbackValue="无数据"><Binding Path="DisplayName"/><Binding Path="FirstName"/><Binding Path="LastName"/></PriorityBinding></TextBlock.Text></TextBlock><!-- 转换器:布尔转可见性 --><TextBlock Text="正在处理..." Visibility="{Binding IsBusy, Converter={StaticResource BoolToVis}}"/><!-- 诊断:输出绑定日志到输出窗口 --><TextBlock Text="{Binding Missing, diag:PresentationTraceSources.TraceLevel=High}"/></StackPanel></UserControl>
- 代码后置:简单 ViewModel 与 DataContext(INotifyPropertyChanged)
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Controls;
namespace H.Test.DataGrid
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
DataContext = new PersonViewModel
{
FirstName = "Ada",
LastName = "Lovelace",
Age = 28,
IsBusy = true
};
}
}
public sealed class PersonViewModel : INotifyPropertyChanged
{
private string _firstName = "";
private string _lastName = "";
private int _age;
private bool _isBusy;
public string FirstName { get => _firstName; set { _firstName = value; OnPropertyChanged(); } }
public string LastName { get => _lastName; set { _lastName = value; OnPropertyChanged(); } }
public int Age { get => _age; set { _age = value; OnPropertyChanged(); } }
public bool IsBusy { get => _isBusy; set { _isBusy = value; OnPropertyChanged(); } }
public event PropertyChangedEventHandler? PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string? name = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
四、常见“坑”与建议
- 文本输入默认在 LostFocus 才回写源;实时回写请设 UpdateSourceTrigger=PropertyChanged,可配合 Delay 节流。
- FallbackValue 用于绑定失败(找不到源/路径),TargetNullValue 用于源值为 null。
- 多层 DataContext 可能被覆盖;相对源/元素名绑定可绕过 DataContext。
- Validation 与异常校验会阻止回写;注意抛异常的代价与用户体验。
- 大量绑定时,可用 Debug > Windows > Output 查看 diag 绑定日志。
五、文档链接
- Binding | Microsoft Learn
- BindingBase | Microsoft Learn
- RelativeSource | Microsoft Learn
- MultiBinding | Microsoft Learn
- PriorityBinding | Microsoft Learn
- IValueConverter | Microsoft Learn
- UpdateSourceTrigger | Microsoft Learn
- BindingOperations | Microsoft Learn
- BindingExpression | Microsoft Learn
- Validation(校验)| Microsoft Learn
- PresentationTraceSources | Microsoft Learn
了解更多
System.Windows.Controls 命名空间 | Microsoft Learn
控件库 - WPF .NET Framework | Microsoft Learn
WPF 介绍 | Microsoft Learn
使用 Visual Studio 创建新应用教程 - WPF .NET | Microsoft Learn
https://github.com/HeBianGu
HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频
GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库
GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924753.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
2025雕塑厂家TOP企业品牌推荐排行榜,婚庆泡沫雕塑,玻璃钢,城市地标不锈钢,校园筑铜,道具,文旅,婚礼堂泡沫,直播间实景泡沫,水泥景观,商业美陈发光雕塑公司推荐!
当前雕塑行业在发展过程中,面临着多重亟待解决的问题。从成本层面来看,部分企业因存在中间商环节,导致产品价格虚高,客户难以获得高性价比的雕塑产品;在定制能力上,一些厂家受限于设备水平和专业团队配置,无法满…
Code--Blocks-和-C---应用开发-全-
Code::Blocks 和 C++ 应用开发(全)原文:zh.annas-archive.org/md5/D136533EB1CB1D754CE9EE199A478703
译者:飞龙
协议:CC BY-NC-SA 4.0前言
《使用 Code::Blocks 进行 C++开发》是一本简洁实用的应用程序开发指南…
做网站网上接单如何引流客源最快的方法
要设计出用户喜欢的界面,你可以考虑以下几个方面: 用户研究:首先要了解用户的需求和偏好。你可以通过用户调研、用户访谈和数据分析来获取这些信息。了解用户的行为模式、喜好和痛点,有助于设计出更吸引人的界面。 直观的布局&am…
VMware Service某些服务关闭导致虚拟机开机无法获取IP地址
现象:
windows下运行着vmware,有一天发现所有虚拟机启动后全部没了IP地址,设置的虚拟机网络为NAT模式。
原因:
应该不是虚拟机的问题,此刻想到前些时候由于windows电脑卡顿, 一股脑关闭了了很多自启动的服务,问…
2025中国无缝钢管厂家 TOP 品牌权威推荐,SA106 无缝钢管,A106B 无缝钢管,SA53B 无缝钢管精选无缝钢管工厂
在无缝钢管行业,随着市场需求的不断增长,各类供货厂家层出不穷,但也带来了诸多问题。部分厂家为追求利润,降低生产标准,导致产品质量参差不齐,存在尺寸偏差、材质不达标等情况,给下游企业的生产安全和项目质量埋…
正能量网站地址链接免费燕郊医疗网站建设
【优选生产报工系统:数据分析、产品管理与基础数据登录的关键选择要素】
在快速变化的制造业环境中,生产报工系统的重要性不言而喻。它不仅仅是一种记录工时和监控生产进度的工具,更是一种能够实现数据驱动决策、优化产品管理和确保基础数据…
总结Vue.js等成功项目的生态建设经验 - 实践
总结Vue.js等成功项目的生态建设经验 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &quo…
完整教程:Java EE初阶启程记03---Thread类及常见方法
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
在AI技术唾手可得的时代,挖掘用户真实需求成为产品成功的关键——某知名设备电量监控工具需求探索
本文基于某知名设备电量监控工具的文档和用户反馈,深入分析其核心功能和应用场景,并重点挖掘用户提出的新功能需求,为产品迭代提供有价值的参考方向。内容描述核心功能定位:该项目是一款专注于在Mac系统上监控和管…
岐山网站开发广州花都区网站建设
或按照S5PV210学习秩序。我们首先解决的关键问题。TQ335x有六个用户按钮,每个上、下、剩下、对、Enter和ESC。我想开始学习S5PV210当同一,写输入子系统驱动器的关键问题要解决,但浏览driver/input/keyboardgpio-keys.c,大体上看下…
wordpress 网站显示加载时长山东建设厅官方网站二建报名
vue创建完项目以后如果报parsing error no babel config file。。。这样的错误的话,关闭项目,用vscode进入项目中打开项目就可以解决了。 1 代码保存的时候会自动将单引号报错为双引号 导致eslint报错的问题, 解决思路: 在项目根…
网站设计用什么软件做的抚州律师网站建设
Date.parse() 方法解析一个表示某个日期的字符串,并返回从1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的UTC时间)的毫秒数,如果该字符串无法识别,或者一些情况下,包含了不合法的日期数值(如…
2025 年润滑脂厂家 TOP 企业品牌推荐排行榜,道达尔润滑脂,工业润滑脂,合成润滑脂,高温润滑脂,轴承润滑脂推荐这十家公司!
在当前工业生产领域,润滑脂作为保障设备稳定运行的关键耗材,其品质与供应服务的重要性日益凸显。然而,市场上润滑脂品牌数量众多,产品质量参差不齐,给企业采购带来诸多困扰。部分品牌存在产品参数不达标、供应链不…
2025切割机厂家TOP企业品牌推荐排行榜,五轴水刀,大理石水刀,全自动水刀,高压水刀,手持式水刀,高压水刀,大理石水刀,便携式水刀切割机公司推荐!
在当前制造业快速发展的背景下,切割机作为关键加工设备,其市场需求持续攀升,但行业也面临诸多亟待解决的问题。一方面,市场上切割机品牌数量众多,产品质量参差不齐,部分厂家为追求短期利益,在生产过程中降低标准…
二十八、API之《System 类》——与框架交互的“桥梁”
二十八、API之《System 类》——与框架交互的“桥梁”pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…
2025橡胶木板材厂家TOP企业品牌推荐排行榜,泰国橡胶木板材,橡胶木免漆板,橡胶木 PET,橡胶木门板,AA 橡胶木,橡胶木指接板公司推荐!
在当下的家居建材市场中,橡胶木板材凭借其出色的性价比、良好的物理性能以及丰富的应用场景,备受消费者与行业从业者的青睐。然而,随着市场的蓬勃发展,各类橡胶木板材品牌如雨后春笋般涌现,质量参差不齐,这给消费…
网站建设哪家公司便宜wordpress游客投稿
类 类的基本特性 数据抽象和封装继承多态 1 类的构成——抽象
概念
数据抽象是一种依赖于接口和实现的分离的编程技术。类的接口包括用户所能执行的操作;类的实现包括类的数据成员、负责接口实现的函数体以及定义类所需要的的各种私有函数。封装实现了类的接口和实…
2025润滑油供应商最新权威推荐排行榜:聚焦耐磨润滑油、工业润滑油、鑫美工业润滑油、壳牌润滑油、道达尔润滑油助力企业采购决策
当前工业领域对润滑油的需求持续增长,但市场乱象却让企业采购面临诸多难题。部分供应商缺乏合规供货渠道,产品无原厂认证与溯源体系,假冒伪劣产品导致设备故障频发、运维成本激增;还有供应商供应链响应慢,紧急用油…
网站手机版二维码怎么做腾讯域名怎么做网站
编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码简称编码。 用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。 编码在电子计算机、电视、遥控和通讯等方面广泛使用。 解码&#x…
多状态循环泵控件开发
所遇问题
描述:在使用定时器设置泵的运行状态时 ,可以成功运行 ,但是会一卡一卡的这里猜测的是定时器时间设置过短导致它本身一个周期还未运行完成就重新开启下一轮的运行
但是将时间设置大了之后 ,结果并不是这样…