调用"command.Execute"是否先隐式调用 CanExecute?



我刚刚实现了对命令的Execute调用,而没有首先调用CanExecute。

从调试中我可以看出CanExecute是被调用的;然而,我不确定这是否是巧合。

我想知道我是否可以依赖这样一个事实,即每当我手动调用Execute时,CanExecute都会被隐式调用,或者我是否应该确保自己调用CanExecute?

你不能依赖它。当Command(通过CommandManager)绑定到类似按钮的启用命令的UI项时调用CanExecute(),但在Execute()中检查CanExecute()本身将是ICommand的特定实现的实现细节,而不是隐含的。

然而,考虑到我经常在自己的代码中执行以下操作,这是一个有趣的想法,而且还不错:

if (SomeCommand.CanExecute(null))
    SomeCommand.Execute(null);

不,如果您只调用execute方法,它不会阻止命令的执行。如果你想这样做,你应该使用:

if(myCommand.CanExecute())
{
    myCommand.Execute(); 
}

或者,如果从绑定中使用该命令,则在更改相应的属性时应引发myCommand.RaiseCanExecuteChanged。

最新更新