CanExecuteChanged
によって返される値が変更されたことをそれにバインドされているすべてのコマンド ソース ( aButton
や など) に通知します。コマンドソースは、通常、それに応じてステータスを更新する必要があるため、これを気にします (たとえば、が返された場合、 a はそれ自体を無効にします)。MenuItem
ICommand
CanExecute
Button
CanExecute()
false
- コマンドの実行能力に影響を与える何かが変更されたと が考える
CommandManager.RequerySuggested
たびに、このイベントが発生します。CommandManager
これは、たとえば、焦点の変更である可能性があります。このイベントは多く発生することがわかりました。
したがって、本質的に、このコードのビットが行うことは、コマンドの実行能力が変更されたとコマンド マネージャーが判断するたびに、CanExecuteChanged
実際には変更されていなくてもコマンドが発生することを保証することです。
私は実際、実装に対するこのアプローチが嫌いICommand.CanExecuteChanged
です。怠惰に感じ、完全に信頼できるとは言えません。RaiseCanExecuteChanged()
私は、コマンドがメソッド (例: raise を呼び出すことができる) を公開CanExecuteChanged
し、ビュー モデルから適切なタイミングでこれを呼び出す、はるかにきめ細かいアプローチを好みます。
たとえば、現在選択されている顧客を削除するコマンドがある場合、選択された顧客がある場合にのみCanExecute()
返すハンドラーがあります。true
したがってRaiseCanExecuteChanged
、選択した顧客が変わるたびに電話をかけます。