我正在使用MVVM,并且使用IDataErrorInfo进行了大部分验证,并且我的ViewModel具有一个IsValid属性,该属性检查需要验证的每个成员的有效性。然而,我有几个绑定到整数不能为空的文本框,所以我使用ValidationRule来提醒用户(用比“无法转换的值”更友好的消息),如果他们空白该字段显然,属性设置器永远不会被调用,所以IDataErrorInfo代码不会被调用。MVVM检测视图模型中的Validation.HasError
问题是我有一个保存按钮(这是一个RelayCommand),我想要禁用,如果有任何验证错误。因此该命令的CanExecute会检查VM的IsValid属性。但显然,如果用户空白我的int字段IDataErrorInfo对此一无所知,并且当前按钮不会被禁用。有没有一种ViewModel可以检测到错误的方法?
我想我在这里找到 http://wpfglue.wordpress.com/2009/12/03/forwarding-the-result-of-wpf-validation-in-mvvm/ 一个解决方案,但有它翻译成C#我无法得到它的工作(在强制回调永远不会被调用)。我不太了解依赖项属性和对象(对WPF来说很新),这个解决方案对我来说看起来很复杂。
我唯一能想到的就是摆脱验证规则,并创建一个可为null的int包装器,将TargetNullValue =''放入绑定中,然后在IDataErrorInfo代码中检查它们是否为null。如果有更好的方法,我宁愿不这样做。
嗨,我写了你引用的博客文章。如果你发布C#代码,我可能会告诉你它有什么问题。 – hbarck