【发布时间】:2011-06-21 13:21:43
【问题描述】:
Icommand 包含两个方法和一个事件。
这两种方法的作用很清楚,但是ICommand中提供的我无法理解事件的作用。
CanExecuteChanged 事件何时引发?
下面的解释在MSDN上,但我看不懂。
CanExecuteChanged 如果 命令管理器 集中指挥行动 检测指挥变化 可能使已提出但未执行的命令无效的源 尚未由命令绑定执行。
你能简单解释一下吗?
谢谢......
【问题讨论】:
Icommand 包含两个方法和一个事件。
这两种方法的作用很清楚,但是ICommand中提供的我无法理解事件的作用。
CanExecuteChanged 事件何时引发?
下面的解释在MSDN上,但我看不懂。
CanExecuteChanged 如果 命令管理器 集中指挥行动 检测指挥变化 可能使已提出但未执行的命令无效的源 尚未由命令绑定执行。
你能简单解释一下吗?
谢谢......
【问题讨论】:
此事件由命令引发,以通知其使用者(即 Button、MenuItem)它的 CanExecute 属性可能已更改。因此,如果焦点从一个 TextBox 移动到另一个,您的命令可能需要启用/禁用。此信息还需要使用您的命令传递给任何控件。
一般来说,这个事件只是重新暴露CommandManager.RequerySuggested 事件。从 RoutedCommand 类:
public event EventHandler CanExecuteChanged {
add {
CommandManager.RequerySuggested += value;
}
remove {
CommandManager.RequerySuggested -= value;
}
}
RequerySuggested 事件经常被触发,随着焦点的移动,文本选择的改变。这也可以通过调用InvalidateRequerySuggested 手动提出。
【讨论】:
CanExecuteChanged,正如你所说...我在 ADD 边放了两个书签和 REMOVE 块,但无法在该位置获取指针...
add/remove 的默认实现管理对事件的订阅,例如CanExecuteChanged += value 为 add。如果您像以前一样覆盖它们,那么客户首先如何订阅该事件?
CanExecuteChanged 在 ICommand 的 CanExecute 方法发生更改时引发
在某些第 3 方库中,如果 CanExecute 参数引发 PropertyChanged 事件,也会引发 CanExecuteChanged 事件。例如,如果CanExecute 参数引发PropertyChanged 事件,则MVVM Light Toolkit 的RelayCommand 引发CanExecuteChanged 事件,而Prism 的DelegateCommand 则不会。
【讨论】:
CanExecute 方法?能否请您详细说明....