我从Josh Smith的MVVM tutorial获得了以下代码。
任何人都可以快速解释一下此代码的实际作用吗?
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
我不明白两件事:
CanExecuteChanged
事件做什么? CommandManager.RequerySuggested
是做什么的? 上面的代码来自here的
RelayCommand
类。 最佳答案
CanExecuteChanged
通知绑定(bind)到该Button
的任何命令源(例如MenuItem
或ICommand
),指示CanExecute
返回的值已更改。命令源对此很在意,因为它们通常需要相应地更新其状态(例如,如果Button
返回CanExecute()
,则false
将禁用自身)。 CommandManager.RequerySuggested
认为发生了某些变化,从而影响命令的执行能力,就会引发CommandManager
事件。例如,这可能是焦点转移。事实证明,此事件引发了很多事情。 因此,实质上,这段代码的作用是确保每当命令管理器认为命令的执行能力已更改时,即使该命令实际上并未更改,该命令也会引发
CanExecuteChanged
。我实际上不喜欢这种实现
ICommand.CanExecuteChanged
的方法-感觉很懒,而且并不完全可靠。我更喜欢一种更细粒度的方法,该命令公开一个方法(例如RaiseCanExecuteChanged()
),您可以调用该方法来引发CanExecuteChanged
,然后在适当的时候从 View 模型中调用它。例如,如果您有一个删除当前选定客户的命令,那么它将有一个
CanExecute()
处理程序,该处理程序仅在选择了一个客户的情况下才返回true
。因此,只要选定的客户发生更改,您都将调用RaiseCanExecuteChanged
。关于wpf - CanExecuteChanged和CommandManager.RequerySuggested的实际任务是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6634777/