ICommand的CanExecuteChanged事件

时间:2011-06-21 13:21:43

标签: c# .net wpf icommand

Icommand包含两种方法一项事件。

这两种方法的作用是明确的,但我无法理解ICommand中提供的事件

CanExecuteChanged事件何时被提升?

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

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

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

感谢......

2 个答案:

答案 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事件。