新闻中心

C# 如何在WPF中实现数据验证 - IDataErrorInfo与INotifyDataErrorInfo

2025-12-07
浏览次数:
返回列表
INotifyDataErrorInfo 支持异步、多错误实时验证,适合复杂场景;IDataErrorInfo 仅同步单错误,适用于简单表单。

c# 如何在wpf中实现数据验证 - idataerrorinfo与inotifydataerrorinfo

在WPF中实现数据验证,IDataErrorInfoINotifyDataErrorInfo 是两种主流接口,它们都支持绑定层自动高亮错误、显示提示,但适用场景和能力有明显区别。

用 IDataErrorInfo 做基础同步验证

这是最轻量、兼容性最好的方式,适合简单表单、单字段即时校验(如非空、长度、格式)。它只提供“拉取式”错误信息——控件失去焦点或触发 Binding 更新时才调用,不主动通知变化。

  • 在 ViewModel 中实现 IDataErrorInfo 接口,必须提供 this[string columnName] 索引器和 string Error { get; } 属性(后者通常不用)
  • 绑定时启用验证:Binding Path=Name, ValidatesOnDataErrors=True, NotifyOnValidationError=True
  • WPF 自动将错误值传给 Validation.ErrorTemplate,配合 TextBoxStyle 可自定义红框/提示图标
  • 注意:索引器里不要 throw 异常,返回 null 或空字符串表示无错;返回非空字符串即为错误提示

用 INotifyDataErrorInfo 做动态异步验证

这是 WPF 4.5+ 推荐的现代方式,支持多错误、实时通知、异步校验(如用户名是否已存在),适合复杂业务场景。

PHP5 和 MySQL 圣经 PHP5 和 MySQL 圣经

本书是全面讲述PHP与MySQL的经典之作,书中不但全面介绍了两种技术的核心特性,还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序。本书涵盖了两种技术新版本中出现的最新特性,书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。

PHP5 和 MySQL 圣经 485 查看详情 PHP5 和 MySQL 圣经
  • 实现 INotifyDataErrorInfo 接口,关键成员包括:bool HasErrorsIEnumerable GetErrors(string propertyName)event EventHandler<dataerrorschangedeventargs></dataerrorschangedeventargs>
  • 错误集合建议用 Dictionary<string list>></string> 管理,每个属性可存多个错误消息
  • 校验逻辑变更后,必须手动触发 ErrorsChanged 事件(例如:ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs("Email"))
  • 绑定写法类似:Binding Path=Email, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True
  • 支持“清除所有错误”:清空字典后触发 ErrorsChanged 并传入 null 或空字符串

实际使用建议

多数项目推荐优先用 INotifyDataErrorInfo,尤其涉及服务端校验、多规则共存或 MVVM 框架(如 Prism、CommunityToolkit.Mvvm)集成时更自然。若需兼容 .NET Framework 4.0 或极简需求,IDataErrorInfo 仍可靠。

  • 避免在 GetErrors 或索引器里做耗时操作(如网络请求),应提前完成并缓存结果
  • 结合 INotifyPropertyChanged 使用:属性变更 → 触发校验 → 更新错误集合 → 触发 ErrorsChanged
  • UI 层可通过 Validation.HasError 触发样式切换,或绑定 (Validation.Errors)[0].ErrorContent 显示第一条提示
  • 第三方库如 FluentValidation 可与两者桥接,提升规则复用性

基本上就这些。选哪个不取决于“高级与否”,而看是否需要实时响应、多错误叠加、异步支持——想清楚验证节奏和交互预期,接口就很容易落地。

以上就是C# 如何在WPF中实现数据验证 - IDataErrorInfo与INotifyDataErrorInfo的详细内容,更多请关注其它相关文章!


# 如何在  # 无内容不营销推广  # seo优化从哪里接单  # 万维网网站怎么做推广  # 环山seo推广服务价格  # qq群营销推广破解  # 株洲国内网站推广  # 密云网上推广营销  # 营销策划与推广电商  # seo推广的方式  # seo标题怎么填写  # 化与  # 空字符串  # wpf数据验证  # 表单  # 书中  # 帮你  # 本书  # 这是  # 两种  # 绑定  # .net  # c#  # 区别  # ai 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: zookeeper 都有哪些功能?  一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法  在J*a中如何使用Stream.map转换元素_Stream映射操作解析  sublime怎么格式化代码_sublime代码美化与一键排版插件配置  qq邮箱日历功能怎么用_创建日程与会议邀请的技巧  Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法  在Pyomo中实现基于变量的条件约束:Big-M方法详解  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  菜鸟取件码是什么怎么查 最全查询渠道汇总  Log4j Console Appender性能瓶颈与高并发优化策略  58动漫网在线官方网 58动漫网正版动漫入口网址  jQuery Mask 插件中实现电话号码固定前导零的教程  漫蛙2网页版漫画入口 漫蛙漫画在线官方登录  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  b站怎么看视频的弹幕数量_b站弹幕数量查看方法  Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性  fishbowl官网免费版 fishbowl养鱼网站入口  excel怎么制作工资条 excel快速生成工资条的方法  Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录  2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析  天猫2025双十一0点秒杀攻略 天猫爆款抢购时间  生成rdflib自定义SPARQL函数:参数匹配与实践指南  在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南  qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程  漫蛙漫画官方首页 漫蛙2漫画在线阅读入口  Golang如何使用const iota_Go iota常量计数器讲解  学习通在线学习平台 学习通网页版直接进入课程中心  Lar*el 递归关系中排除指定分支的教程  抖音从哪里进入网页版_抖音官方入口链接  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  微信网页版官方快速登录入口 微信网页版网页版账号直达  蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  2025-2030年全球乘用车销量预测:新能源成增长主力  qq游戏跨平台入口_qq游戏多设备同步登录  Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法  拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达  抓大鹅无需下载版 抓大鹅秒玩版入口  葱吃多了会怎样 葱吃多了会伤胃吗  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  支付宝如何设置安全保护_支付宝安全设置的全面教程  抖音网页版快捷访问 抖音网页版网页版入口操作教程  Win11输入法不见了怎么办_Windows11恢复语言栏显示方法  如何在 Excel Online 和 Google 表格中更改日期格式  必由学在线入口 必由学网页版快速登录入口 

搜索