我从 Josh Smith 的 MVVM 中得到了以下代码tutorial http://msdn.microsoft.com/en-us/magazine/dd419663.aspx.
谁能快速解释一下这段代码的实际用途?
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
我无法理解两件事:
- 什么是
CanExecuteChanged
事件呢?
- 什么是
CommandManager.RequerySuggested
do?
上面的代码来自于RelayCommand
班级来自here http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090030.
-
CanExecuteChanged
通知任何命令源(例如Button
or MenuItem
)与此绑定ICommand
返回的值CanExecute
已经改变。命令源关心这一点,因为它们通常需要相应地更新其状态(例如,Button
如果出现以下情况,将禁用自身CanExecute()
回报false
).
- The
CommandManager.RequerySuggested
每当CommandManager
认为某些事情发生了变化,会影响命令的执行能力。例如,这可能是焦点的改变。事实证明这个事件火了很多。
因此,本质上,这段代码的作用是确保每当命令管理器认为命令的执行能力发生变化时,该命令都会引发CanExecuteChanged
即使它实际上没有改变。
我实际上不喜欢这种实施方法ICommand.CanExecuteChanged
- 感觉很懒而且不完全可靠。我更喜欢更细粒度的方法,其中命令公开一个方法(例如RaiseCanExecuteChanged()
) 你可以打电话加注CanExecuteChanged
,然后您在适当的时间从视图模型中调用它。
例如,如果您有一个删除当前选定客户的命令,它将有一个CanExecute()
返回的处理程序true
仅当有客户选择时。因此你会打电话RaiseCanExecuteChanged
每当选定的客户发生变化时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)