Icommand
には2つのメソッドと1つのイベントが含まれます
2つの方法の機能は明らかですが、イベントの機能がわかりませんICommand
で提供されています。
CanExecuteChanged
イベントはいつ発生しますか?
以下の説明は[〜#〜] msdn [〜#〜]ですが、私は理解できません。
CanExecuteChangedは、コマンド操作を一元化するコマンドマネージャーが、発生したがコマンドバインディングによってまだ実行されていないコマンドを無効にする可能性のあるコマンドソースの変更を検出した場合に発生します。 。
これを簡単に説明していただけますか?
ありがとう......
CanExecuteChanged
のCanExecute
メソッドが変更されるとICommand
が発生します
一部のサードパーティライブラリでは、CanExecuteChanged
パラメータがCanExecute
イベントを発生させると、PropertyChanged
イベントも発生します。たとえば、MVVM LightToolkitのRelayCommand
はCanExecuteChanged
パラメータがCanExecute
イベントを発生させる場合、PropertyChanged
イベントを発生させますが、PrismのDelegateCommand
は発生しません。
このイベントは、CanExecuteプロパティが変更された可能性があることをコンシューマー(つまり、Button、MenuItem)に通知するコマンドによって発生します。したがって、フォーカスをあるTextBoxから別のTextBoxに移動する場合は、コマンドを有効/無効にする必要がある場合があります。この情報は、コマンドを使用してすべてのコントロールに渡す必要もあります。
一般に、このイベントは単に CommandManager.RequerySuggested イベントを再公開します。 RoutedCommandクラスから:
public event EventHandler CanExecuteChanged {
add {
CommandManager.RequerySuggested += value;
}
remove {
CommandManager.RequerySuggested -= value;
}
}
RequerySuggestedイベントは非常に頻繁に発生します。フォーカスが移動すると、テキストの選択が変更されます。これは、 InvalidateRequerySuggested を呼び出すことによって手動で発生させることもできます。