5

私は人々が彼らのコードでCanExecuteのようなメソッドを作成しているチュートリアルを見てきました。読者がすべてがどのように機能するかを理解するのを助けるために、彼らがこれを行っていると思います。CommandとICommandを検索すると、Windowsストアアプリで使用されるMSDNのICommandクラスに移動します。WPFのCommandクラスはありませんか?

4

1 に答える 1

8

ICommandin WPFの組み込み実装はRoutedCommand(およびその兄弟RoutedUICommand)です。RoutedCommandこのように動作します:

ExecuteandCanExecuteメソッドにRoutedCommandは、通常のの場合のようにコマンドのアプリケーションロジックが含まれていませんが ICommand、これらのメソッドは、要素ツリーをトラバースしてオブジェクトを探すイベントを発生させますCommandBinding。に接続されているイベントハンドラーにCommandBindingは、コマンドロジックが含まれています。

これに伴う問題は、これらのイベントハンドラーをビューのコードビハインドにアタッチする必要があることです。これは、MVVMでは実行したくないことです。

コード内のメソッドを見るチュートリアル(つまり、実際には実装外のCanExecuteコードを意味します)は、 /ロジックをその場で提供される関数に「転送」するように設計されたなどのカスタムコマンド実装を使用しています。通常、これらはコマンドを公開するビューモデルのメソッドです。ICommandDelegateCommandRelayCommandCanExecuteExecute

これらの実装は通常、MVVMフレームワークによって提供されます(これらの2つの例では、フレームワークはそれぞれPrismとMVVM Lightです)が、実際には単純であり(どちらもオープンソースであり、コードを取得して読み取る)、コピー/貼り付けを妨げるものは何もありません。フレームワーク全体が必要ない場合は、コード。

上記を「WPFにはコマンドクラスが組み込まれていますが、MVVMのコンテキストではあまり役に立ちません」と要約できます。

于 2013-03-06T13:50:28.863 に答える