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

时间:2014-08-27 11:57:30

标签: c# wpf routed-commands canexecute

我刚刚为Command执行了一个Execute调用,而没有先调用CanExecute。

从调试开始我会告诉CanExecute被调用;但是,我不确定这是不是巧合。

我想知道我是否可以依赖每当我手动提升执行时隐式调用CanExecute的事实,或者我是否应该确保自己调用CanExecute?

2 个答案:

答案 0 :(得分:2)

你不能依赖它。 CanExecute()Command绑定到启用命令的UI项目(如CommandManager),但在CanExecute()本身检查Execute()时会调用ICommandif (SomeCommand.CanExecute(null)) SomeCommand.Execute(null); 的具体实现的实现细节,并不暗示。

然而,考虑到我在自己的代码中必须执行以下操作的频率,这是一个有趣的想法,并不是一个糟糕的想法:

{{1}}

答案 1 :(得分:1)

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

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

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