web-dev-qa-db-ja.com

ICommandのCanExecuteChangedイベント

Icommandには2つのメソッド1つのイベントが含まれます

2つの方法の機能は明らかですが、イベントの機能がわかりませんICommandで提供されています。

CanExecuteChangedイベントはいつ発生しますか?

以下の説明は[〜#〜] msdn [〜#〜]ですが、私は理解できません。

CanExecuteChangedは、コマンド操作を一元化するコマンドマネージャーが、発生したがコマンドバインディングによってまだ実行されていないコマンドを無効にする可能性のあるコマンドソースの変更を検出した場合に発生します。 。

これを簡単に説明していただけますか?

ありがとう......

21
Pritesh

CanExecuteChangedCanExecuteメソッドが変更されるとICommandが発生します

一部のサードパーティライブラリでは、CanExecuteChangedパラメータがCanExecuteイベントを発生させると、PropertyChangedイベントも発生します。たとえば、MVVM LightToolkitのRelayCommandCanExecuteChangedパラメータがCanExecuteイベントを発生させる場合、PropertyChangedイベントを発生させますが、PrismのDelegateCommandは発生しません。

7
Rachel

このイベントは、CanExecuteプロパティが変更された可能性があることをコンシューマー(つまり、Button、MenuItem)に通知するコマンドによって発生します。したがって、フォーカスをあるTextBoxから別のTextBoxに移動する場合は、コマンドを有効/無効にする必要がある場合があります。この情報は、コマンドを使用してすべてのコントロールに渡す必要もあります。

一般に、このイベントは単に CommandManager.RequerySuggested イベントを再公開します。 RoutedCommandクラスから:

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

RequerySuggestedイベントは非常に頻繁に発生します。フォーカスが移動すると、テキストの選択が変更されます。これは、 InvalidateRequerySuggested を呼び出すことによって手動で発生させることもできます。

22
CodeNaked