9

在 XAML 中使用ICommands 时,WPF 使用该CanExecute方法来启用或禁用与命令关联的控件。但是如果我Execute从程序代码调用呢?我应该先检查CanExecute以确保命令可以执行,还是应该Execute为我处理这个检查?

换句话说,我应该这样做:

if (someCommand.CanExecute(parameter, target))
    someCommand.Execute(parameter, target);

或者只是这样:

someCommand.Execute(parameter, target);
4

3 回答 3

8

好的风格会要求你应该做前者,首先检查 CanExecute 。这将强制执行适当的分解和一致性。此外,如果您确实想使用绑定到按钮的此命令,它将按预期工作。

于 2011-08-04T14:20:55.060 回答
5

您应该只调用 Execute 并让命令实现处理验证。CanExecute 主要是为 UI 状态绑定提供的。

除了非常简单的单线程场景,即使您首先调用 CanExecute,也很容易出现竞争条件,即 CanExecute 和 Execute 调用之间的命令有效性发生变化,从而使对 CanExecute 的调用毫无意义。

于 2011-08-04T14:24:11.290 回答
2

您需要首先调用 CanExecute,没有什么说实现 ICommand 的类在其 Execute 方法中检查其 CanExecute 。

于 2011-08-04T14:24:29.587 回答