2013-03-06 4 views
5

私は、人々がコードでCanExecuteのようなメソッドを作成しているチュートリアルを見てきました。私は、読者がそのすべての仕組みを理解するのを助けるために、これをやっていると仮定しています。私がCommandとICommandを調べると、MSDNのICommandクラスがWindows Storeアプリケーションに使用されます。 WPF用のCommandクラスはありませんか?MVVMのコマンド

答えて

8

WPFでのICommandの組み込み実装は、RoutedCommand(およびその兄弟RoutedUICommand)です。このようなRoutedCommand作品:典型的な ICommandの場合と同様にRoutedCommand

ExecuteCanExecute方法は コマンドのためのアプリケーションロジックが含まれていないが、むしろ、これらの方法は を通過するイベントを上げます要素ツリーはCommandBindingのオブジェクトを探します。 CommandBindingに接続されたイベント ハンドラには、コマンドロジックが含まれています。

これに伴う問題は、これらのイベントハンドラは、あなたがはMVVMでやりたいではない何をすべきか正確には、あなたのビュー、のためにコードビハインドに添付しなければならないということです。あなたは、コード内CanExecute方法を参照してください

チュートリアルは、カスタムコマンドの実装を使用している(とそれによって私たちは本当にICommand実装外のコードを意味する)のようなDelegateCommandとする「前方」、そのCanExecute/Executeロジックに設計されていますRelayCommandオンザフライで提供される機能。通常は、コマンドを公開するビューモデル上のメソッドです。

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

あなたは「そこは組み込みコマンドクラスWPFでですが、それはMVVMのコンテキストで非常に便利ではありません」として上記をまとめることができます。

+1

新しいOPがMVVMにどのようになっているかによって、特定のMVVMフレームワークを使用せずにDelegateCommandの独自のバージョンを非常に簡単に実装できることに注意してください。 – Thelonias

+0

@ライアン:ありがとう、私は答えのいくつかの編集を終了し、今あなたの提案を反映しています。 – Jon

+0

DelegateCommandは私が使用するためにMicrosoftから提供されていますか?これは私の最初のWPFアプリケーションと私の最初のMVVMアプリケーションです。私は数年前からWinFormsを使用してきましたが。これまでのところ、私はWPFが本当に好きです!これは私の最初のMVVMアプリケーションなので、私はむしろすべてのコードを自分で作成し、MVVM Lightのようなフレームワークは使用しないので、すべての動作をよりよく理解することができます。 – tylerbhughes

関連する問題