2014-01-11 68 views
0

我试图弄清我最后一个问题的本质,并为描述带来一些更清晰的内容。WPF验证和CanExecute命令

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

的目标是:

  • 最初禁用 “保存” 按钮。
  • 只有在两个文本字段都经过验证而未对每个属性更改的整个ViewModel进行验证的情况下,才启用“保存”按钮。

对于第一个目标,我使用isValidated布尔属性,它最初是假的,一旦发生第一次验证就会变为真。然后在CanExecute方法中使用HasErros检查此属性。有没有更优雅的方式?

我不知道如何实现第二个目标。对此有何想法?

THX

+0

你正在使用什么'ICommand'实现?你有'RaiseCanExecuteChanged()'方法或类似的方法吗?每次相关属性更改时都要打电话。 – Gusdor

+0

我只执行了Execute和CanExecute方法。 RaiseCanExecuteChanged()的实现如何帮助? – toppless

+0

我所做的是CanExecuteChanged事件的实现。 公共事件EventHandler CanExecuteChanged { add {CommandManager.RequerySuggested + = value; } remove {CommandManager.RequerySuggested - = value; } } – toppless

回答

0

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

•只有在每个属性更改都未验证整个ViewModel的情况下成功验证两个文本字段时,才启用“保存”按钮。

最初,文本字段将是空的,所以推测,他们将通过验证。因此一开始,你SaveButton被禁用,按你的第一个目标:

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

其次,在你的最后一个问题(这很可能需要添加一个链接,如果你要提到它在这个岗位),你有一些问题,在CanExecute处理程序使用!HasErros。这个时候,你需要验证所有属性一起以满足您的第二个要求......所以只是在CanExecute处理程序使用!HasErros