3

WPFコマンドをスタンドアロンオブジェクトとして実装することは可能/実用的ですか? もしそうなら、これは通常どのように行われますか? 私がコマンドについて目にする例のほとんどは、通常、RoutedCommand、RoutedUICommand、または RelayCommand のような ICommand の他の実装を使用することを含みます。これらのコマンドが MVVM パターンで機能する方法は、プロパティを通じてこれらのタイプのコマンドのいずれかのインスタンスを公開することです。ViewModel 内では、コマンドのロジックが ViewModel のメソッドとして実装され、デリゲートとしてコマンド オブジェクトに渡されます。

私が理解している「古典的な」コマンド パターンは、各コマンドを OpenCustomerViewCommand などの独自のスタンドアロン オブジェクトとして実装することです。ロジックは独自のオブジェクトに完全にカプセル化されるため、アプリの他の部分で再利用できる可能性があります。たとえば、アプリのいくつかの場所から CustomerView を開くことができる場合、そのメソッドをコピーして各 ViewModel に貼り付けるのではなく、CustomerView にアクセスできる各 ViewModel で OpenCustomerViewCommand のインスタンスを単純に作成できると便利です。 、デリゲートを RelayCommand に渡します。私の理解が正しければ、Cut や Paste などの定義済みの ApplicationCommands はこのように動作します。

私には、ViewModel 内にロジックを提供する必要があるため、コマンド パターンの価値が少し低下するように思えます。この方法で実行することと、UI イベントのコマンド ハンドラーを実装するコード ビハインドを使用することとの主な違いを、私は本当に理解していないと思います。上記で説明したより古典的なアプローチよりも RoutedCommand パターンを使用する必要がある理由はありますか?

4

1 に答える 1

3

これを行うこともできますが、リクエストを適切にルーティングする何らかの方法が必要です。

あなたの例では、「顧客ビュー」を開く方法OpenCustomerViewCommandと場所を知っていれば、どこでも簡単に再利用できます。のようなクラスを使用する代わりに、直接実装してロジックを追加するだけで、これを行うことができます。RelayCommandICommand

ただし、問題は、ほとんどのコマンドが、ViewModel 固有の機能を実行するための xaml 用のアダプターである傾向があることです。私が取り組んできたほとんどのアプリケーションでは、実際に再利用が必要なコマンドはほとんどない傾向があります。ほとんどのコマンドは、問題の ViewModel に固有の機能に関連付けられています。そのため、RelayCommand のようなものを使用すると、これを簡単に接続できます。

于 2011-12-29T00:56:14.827 に答える