WPF验证和CanExecute命令

时间:2014-01-11 17:09:23

标签: c# wpf validation mvvm inotifydataerrorinfo

我试图弄清楚我上一个问题的本质,并使描述更加清晰。

给定是一个WPF表单,用于提交包含两个文本字段和“保存”按钮的新数据。两个文本字段都是必填字段,并绑定到ViewModel属性。 Button使用Execute和CanExecute方法绑定到“Execute”中继命令。 CanExecute返回!ViewModel的HasErrors。 ViewModel实现了INotifyPropertyChanged和INotifyDataErrorInfo接口。属性设置器仅运行此属性的验证。

目标是:

  • 最初禁用“保存”按钮。
  • 仅当两个文本字段都成功验证时才启用“保存”按钮,而不会在每次更改属性时验证整个ViewModel。

对于第一个目标,我使用isValidated bool属性,该属性最初为false,并在第一次验证发生后立即变为true。然后在CanExecute方法中与HasErros一起检查此属性。有更优雅的方式吗?

我不知道如何实现第二个目标。有没有想过这个?

THX

1 个答案:

答案 0 :(得分:0)

你的两个目标真的只有一个目标。让我们先看看你的第二个目标:

  

•仅当两个文本字段都成功验证时才启用“保存”按钮,而不会在每次更改属性时验证整个ViewModel。

最初,您的文本字段将为空,因此可能会 通过验证。因此,最初,根据您的第一个目标,您的Save Button 将被停用

  

•最初禁用“保存”按钮。

其次,在你的上一个问题中(如果你要在这篇文章中提及它,你应该添加一个链接),你在!HasErros处理程序中使用CanExecute时遇到了一些问题。这次,您需要同时验证所有属性以满足您的第二个要求...所以只需在!HasErros处理程序中使用CanExecute