如何使用IDataErrorInfo强制验证错误更新ViewModel中的View?

sur*_*fen 17 c# validation wpf mvvm idataerrorinfo

我有一个基于MVVM的窗口,有许多控件,我的模型实现IDataErrorInfo.

还有一个SaveCommand按钮,通过分析Model.Error属性执行验证.

仅当我更改特定控件的值时,或者当我使用PropertyChanged通知有关该属性的更改时,视图才会显示控件周围的默认红色边框.

即使我没有触摸控件,如何强制View显示所有验证错误?

我的所有验证绑定都包括ValidatesOnDataErrors=True, NotifyOnValidationError=True.

我知道一个解决方案是有一个包含所有错误的聚合框,但我更愿意在每个控件的基础上显示错误.

我不想Model.NotifyPropertyChanged从ViewModel 触发每个绑定属性.

我使用的是WPF 4.0,而不是Silverlight,因此INotifyDataErrorInfo无法使用.

Bra*_*orf 13

您提到您不希望为绑定的属性引发更改的属性,但这确实是实现此目的的最简单方法.调用不带参数的PropertyChanged将为viewmodel中的所有属性引发.

或者,您可以在任何控件上更新绑定(并强制重新验证),如下所示:

myControl.GetBindingExpression(ControlType.ControlProperty).UpdateSource();
Run Code Online (Sandbox Code Playgroud)

  • 感谢PropertyChanged的技巧.我不知道这是可能的.我发现了关于这个主题的另一个讨论:http://stackoverflow.com/questions/1135012/wpf-mvvm-can-a-single-propertychanged-update-all-the-data-bindings-of-a-datate if任何人都有兴趣.如果某人有一个简单的viewModel,这是一个很好的答案.但是我有一个带有嵌套ViewModel的复杂视图,因此我必须为每个实现INotifyPropertyChanged的嵌套绑定Model/ViewModel编写一次代码来调用PropertyChanged (2认同)