2015-09-08 67 views
0

我有一个文本框,其Text属性绑定到视图模型中的整数属性。如果用户输入的文本是整数,WPF会自动进行验证。这个功能对我来说很好,所以我不需要构建额外的验证。视图模型中验证错误的意识

现在我有一个按钮,其Command属性绑定到相同视图模型中的命令,并且如果有任何验证错误,我希望CanExecute该命令的方法返回false。

在视图模型中是否有可能知道是否存在任何验证错误?

+0

最简单的把整数属性设为可空'int?'然后检查HasValue中是否可以执行 – cleftheris

+1

http://stackoverflow.com/questions/30025757/inotifydataerrorinfo-and-binding-exceptions/30030623#30030623 – blindmeis

+0

你会必须使用^或添加代码并告诉我们如何实现整数属性的验证。 'int?'可能无法正常工作,因为如果无效,您的验证可能不会更新您的支持属性。 – Kcvin

回答

1

我想提出这样的:

  • 布尔HasErrors属性添加到您的视图模型。
  • 我你的财产setter方法:拨打你的 视图模型一个(或多个)自定义的验证方法(然后通知属性更改)
  • 在验证方法(S):在HasErrors属性设置为true 是否有错误或者如果没有错误,则将其设置为false。
  • 在你CanExecute方法:检查HasErrors财产


此步骤实现INotifyDataErrorInfo界面的上方至简体版本(见this文章),将其引入.NET 4.5。

如果你喜欢,你也可以完全实现这个接口,如链接文章所述,但我认为这比你需要的更多。

使用INotifyDataErrorInfo您可以为每个属性设置和检索错误列表,但这似乎不是您的情况的要求,这就是为什么我只提供了一个更简单的示例,只有一个标志HasErrors