2011-10-23 13 views
3

私はMVVMソフトウェアの設計パターンを習得しようとしています。私はマシュー・マクドナルドの本「WPF in C#2010」を持っています。 MVVMの学習を始めようと、私はWindowsClient.netのWebサイト、特にTodd Mirandaのビデオ、「MVVMパターンを使ったデータ駆動型WPFアプリケーションの構築方法」を見てきました。そこでは、RoutedCommandについて簡単に説明しますが、ICommandインターフェイスに基づいてRelayCommandというクラスを実装しています。これは有望だったが、私が開発しているウィンドウ(テキストボックスを持つ単純なウィンドウ、およびユーザーが入力したパラメータを使用して検索を行い、結果をリストボックスに返すボタン)が、トッドがしたこと。基本的には、私が書いたRelayCommandクラスにユーザが入力した検索パラメータを取得する方法を見つけることができません。これは、リストボックスに表示されるAllClientsを呼び出すObservableCollectionを返します。 MacDonaldの本はRoutedCommand、特にRoutedUICommandについて議論し、率直に言ってこれは私がしようとしていることに有望なものです。しかし、MVVMのパターンをよりよく理解するために、私はAmazonでMVVMパターンを学ぶのに役立つ本を簡単に見て、Gary Hallの "Pro WPF and Silverlight MVVM"のような本を見つけました。その本では、ホールはRoutedCommandルートが行く方法ではないことを強く示唆しているようです。それは問題であるため、RelayCommandを使用する方が良いです。なぜRelayCommandをRoutedCommandより優先しますか?

まあ、率直に言って、私は本当に混乱しています。まず、私はホールの議論を全く理解していない。 RoutedCommands(またはおそらくRoutedUICommandsも同様)をこのような悪い選択肢を使用しているのはなぜですか?なぜRelayCommandsを使用するのが優れているのですか?

+0

可能な複製http://stackoverflow.com/questions/650010/mvvm-routed-and-relay-command – Ekk

答えて

3

一般的に言えば、私はRoutedCommandがしばしば大きめであることを発見しました。その力の説明はWPF ICommand vs RoutedCommandです。

RelayCommandの優位性は、その使いやすさと簡単さから来ていると思います。これは、ビューモデルのExecuteとオプションでCanExecuteイベントハンドラでインスタンス化されます。これは、ボタン、メニューアイテムなどにいくつかの機能を取り入れることを望んでいた状況では、いつもうまくいっています。

コマンドを渡す必要があるパラメータがある場合は、コマンド実装が配置されている場所の隣にあるビューモデルでそれらを使用することをお勧めします。たとえば、検索コマンドの場合、検索テキストを含むビューモデルの文字列プロパティにバインドされたテキストボックスがあります。コマンドのExecuteイベントハンドラが呼び出されると、そのプロパティの値が使用され、モデルに実装されている検索ルーチンに渡されます。したがって、コマンドのParametersプロパティを使用する必要はありません。ビューモデルアプローチは、より柔軟性があり、複数のパラメータを可能にします。

+0

WPF ICommandとRoutedCommandのリンクをありがとうございました。それは役に立ちます。 RouteCommandやRoutedUICommandは、ある状況ではその目的を持っている可能性があり、RelayCommandのようなものを使用すると、他の状況でその目的を持つ可能性があります。提案にリンクした質問に返信する2番目の人物として、RoutedCommandを使用すると、ビュー内のイベントにもっと依存します。したがって、いくつかのコードが必要となる可能性があります。つまり、ビューにどれだけのコードが必要かによって異なります。 – Rod

関連する問題