CanExecuteChanged event of ICommand



Icommand包含两个方法一个事件

这两种方法的作用很清楚,但我不明白ICommand中提供的事件的作用。

CanExecuteChanged事件何时引发?

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

如果命令管理器集中指挥操作检测命令的更改可能使已引发但未引发的命令无效的源仍然由命令绑定执行。

你能简单地解释一下吗?

谢谢。。。。。。

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

通常,此事件只是重新导出CommandManager.RequeryProposed事件。从RoutedCommand类:

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

RequerySuggested事件经常被触发,因为焦点被移动,文本选择被更改。也可以通过调用InvalidateRequerySuggested手动引发此问题。

ICommandCanExecute方法更改时,会引发CanExecuteChanged

在某些第三方库中,如果CanExecute参数引发PropertyChanged事件,则也会引发CanExecuteChanged事件。例如,如果CanExecute参数引发PropertyChanged事件,MVVM Light Toolkit的RelayCommand会引发CanExecuteChanged事件,而Prism的DelegateCommand则不会。

最新更新