【问题标题】:Does calling "command.Execute" implicitly call CanExecute first?调用“command.Execute”会先隐式调用 CanExecute 吗?
【发布时间】:2014-08-27 11:57:30
【问题描述】:
我只是在没有先调用 CanExecute 的情况下实现了对命令的 Execute 调用。
从调试中我会说 CanExecute 被调用了;但是,我不确定这是否是巧合。
我想知道我是否可以依赖这样一个事实,即每当我手动提出 Execute 时都会隐式调用 CanExecute,或者我是否应该确保自己调用 CanExecute?
【问题讨论】:
标签:
c#
wpf
routed-commands
canexecute
【解决方案1】:
你不能依赖它。 CanExecute() 在Command 绑定到启用命令的 UI 项(如按钮)时调用(通过 CommandManager),但在 Execute() 中检查 CanExecute() 本身将是 @ 的特定实现的实现细节987654326@ 并不暗示。
但是,考虑到我必须在自己的代码中执行以下操作的频率,这是一个有趣的想法,而且还不错:
if (SomeCommand.CanExecute(null))
SomeCommand.Execute(null);
【解决方案2】:
不,如果您只是调用 Execute 方法,它不会停止执行命令。
如果你想这样做,你应该使用:
if(myCommand.CanExecute())
{
myCommand.Execute();
}
或者,如果您从绑定中使用该命令,则应在更改相应属性时引发 myCommand.RaiseCanExecuteChanged。