Icommand
包含两种方法和一项事件。
这两种方法的作用是明确的,但我无法理解ICommand
中提供的事件。
CanExecuteChanged
事件何时被提升?
以下说明在 MSDN 上,但我无法理解。
如果命令管理器,则会引发 CanExecuteChanged 集中命令操作检测命令的变化 可能使已经引发但未引发的命令无效的源 但是由命令绑定执行。
你能用简单的语言解释一下吗?
感谢......
答案 0 :(得分:22)
该事件由命令引发,以通知其消费者(即Button,MenuItem)它的CanExecute属性可能已更改。因此,如果焦点从一个TextBox移动到另一个TextBox,则可能需要启用/禁用您的命令。此信息也需要使用您的命令传递给任何控件。
通常,此事件只是重新展示CommandManager.RequerySuggested事件。来自RoutedCommand类:
public event EventHandler CanExecuteChanged {
add {
CommandManager.RequerySuggested += value;
}
remove {
CommandManager.RequerySuggested -= value;
}
}
RequerySuggested事件经常被触发,因为焦点被移动,文本选择被更改。这也可以通过调用InvalidateRequerySuggested手动提升。
答案 1 :(得分:7)
CanExecuteChanged
的{{1}}方法发生变化时,会引发 CanExecute
在某些第三方库中,如果ICommand
参数引发CanExecuteChanged
事件,则CanExecute
事件也会被引发。例如,如果PropertyChanged
参数引发RelayCommand
事件,则MVVM Light Toolkit的CanExecuteChanged
引发CanExecute
事件,而Prism的PropertyChanged
则不会引发DelegateCommand
事件。