25

Icommand包含两个方法一个事件。

这两种方法的作用很清楚,但我无法理解ICommand.

什么时候CanExecuteChanged提出事件?

以下解释在MSDN上,但我无法理解。

如果集中命令操作的命令管理器检测到命令源中的更改可能会使已引发但尚未由命令绑定执行的命令无效,则会引发CanExecuteChanged 。

你能用简单的话解释一下吗?

谢谢......

4

2 回答 2

25

该事件由命令引发,以通知其使用者(即 Button、MenuItem)它的 CanExecute 属性可能已更改。因此,如果焦点从一个 TextBox 移动到另一个,您的命令可能需要启用/禁用。此信息还需要使用您的命令传递给任何控件。

通常,此事件只是重新公开CommandManager.RequerySuggested事件。从 RoutedCommand 类:

public event EventHandler CanExecuteChanged {
    add {
        CommandManager.RequerySuggested += value;
    }
    remove {
        CommandManager.RequerySuggested -= value;
    }
}

RequerySuggested 事件经常被触发,随着焦点的移动,文本选择发生变化。这也可以通过调用InvalidateRequerySuggested手动提出。

于 2011-06-21T13:51:43.160 回答
8

CanExecuteChangedCanExecutean 的方法ICommand改变时引发

在某些第 3 方库中,如果参数引发CanExecuteChanged事件,也会引发事件。例如,如果参数引发事件,MVVM Light Toolkit会引发事件,而 Prism不会。CanExecutePropertyChangedRelayCommandCanExecuteChangedCanExecutePropertyChangedDelegateCommand

于 2011-06-21T13:51:45.680 回答