私は人々が彼らのコードでCanExecuteのようなメソッドを作成しているチュートリアルを見てきました。読者がすべてがどのように機能するかを理解するのを助けるために、彼らがこれを行っていると思います。CommandとICommandを検索すると、Windowsストアアプリで使用されるMSDNのICommandクラスに移動します。WPFのCommandクラスはありませんか?
1 に答える
ICommand
in WPFの組み込み実装はRoutedCommand
(およびその兄弟RoutedUICommand
)です。RoutedCommand
このように動作します:
の
Execute
andCanExecute
メソッドにRoutedCommand
は、通常のの場合のようにコマンドのアプリケーションロジックが含まれていませんがICommand
、これらのメソッドは、要素ツリーをトラバースしてオブジェクトを探すイベントを発生させますCommandBinding
。に接続されているイベントハンドラーにCommandBinding
は、コマンドロジックが含まれています。
これに伴う問題は、これらのイベントハンドラーをビューのコードビハインドにアタッチする必要があることです。これは、MVVMでは実行したくないことです。
コード内のメソッドを見るチュートリアル(つまり、実際には実装外のCanExecute
コードを意味します)は、 /ロジックをその場で提供される関数に「転送」するように設計されたなどのカスタムコマンド実装を使用しています。通常、これらはコマンドを公開するビューモデルのメソッドです。ICommand
DelegateCommand
RelayCommand
CanExecute
Execute
これらの実装は通常、MVVMフレームワークによって提供されます(これらの2つの例では、フレームワークはそれぞれPrismとMVVM Lightです)が、実際には単純であり(どちらもオープンソースであり、コードを取得して読み取る)、コピー/貼り付けを妨げるものは何もありません。フレームワーク全体が必要ない場合は、コード。
上記を「WPFにはコマンドクラスが組み込まれていますが、MVVMのコンテキストではあまり役に立ちません」と要約できます。