You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF MVVM DataGrid单元格验证错误行为问题:为何值会被移除?

解决DataGrid切换行时验证错误消失、原始值丢失的问题

我之前做DataGrid开发时也碰到过一模一样的问题,给你两个完全匹配你期望方向的解决方案:

方案一:保持验证错误显示(跨行切换不消失)

这个方案的核心是把验证逻辑和模型实例绑定,而非仅依赖UI层的临时验证状态:

  • 让你的数据模型实现INotifyDataErrorInfo接口(如果是WPF/.NET环境),或者对应框架的类似验证接口。这样验证错误会被存在模型对象内部,只要模型实例没被销毁,错误状态就会一直保留。
  • 实现接口时,在属性变更(比如Name被修改)时自动触发验证,把错误信息存入模型的错误集合,并通过ErrorsChanged事件通知UI。
  • 确保DataGrid的ValidatesOnNotifyDataErrors属性设置为True,让UI能监听模型的错误状态。
    这样一来,哪怕你切换到其他行,之前的行对应的模型依然持有错误状态,当你切回去时,错误提示会自动重新显示。

方案二:切换行时自动恢复原始值

如果更希望验证不通过就放弃修改,回到编辑前的状态,可以这么做:

  • 在你的数据模型里,为每个需要验证的属性添加一个“原始值备份”字段,比如_originalName对应Name属性。
  • 监听DataGrid的BeginningEdit事件,在用户开始编辑某个单元格时,把当前属性的原始值存入备份字段。
  • 监听CellEditEnding事件,当检测到验证失败(比如通过模型的错误集合判断),且编辑结束的原因是用户切换到其他行时,把属性值还原为备份的原始值。
  • 额外注意:如果验证失败,要确保无效值不会被提交到模型里,避免脏数据残留。

小提示

不管选哪种方案,都建议把验证逻辑统一放在模型层,不要只在UI层做验证。这样不仅能解决当前的行切换问题,还能保证数据在任何场景下的一致性。如果用MVVM框架的话,很多框架都有现成的验证扩展,可以帮你简化INotifyDataErrorInfo的实现,不用自己写重复代码。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:39:59