呼叫“;命令执行“;先隐式调用CanExecute

本文关键字:调用 CanExecute 执行 命令 呼叫 | 更新日期: 2023-09-27 18:19:39

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

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

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

呼叫“;命令执行“;先隐式调用CanExecute

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

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

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

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

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

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