WPFコマンドをスタンドアロンオブジェクトとして実装することは可能/実用的ですか? もしそうなら、これは通常どのように行われますか? 私がコマンドについて目にする例のほとんどは、通常、RoutedCommand、RoutedUICommand、または RelayCommand のような ICommand の他の実装を使用することを含みます。これらのコマンドが MVVM パターンで機能する方法は、プロパティを通じてこれらのタイプのコマンドのいずれかのインスタンスを公開することです。ViewModel 内では、コマンドのロジックが ViewModel のメソッドとして実装され、デリゲートとしてコマンド オブジェクトに渡されます。
私が理解している「古典的な」コマンド パターンは、各コマンドを OpenCustomerViewCommand などの独自のスタンドアロン オブジェクトとして実装することです。ロジックは独自のオブジェクトに完全にカプセル化されるため、アプリの他の部分で再利用できる可能性があります。たとえば、アプリのいくつかの場所から CustomerView を開くことができる場合、そのメソッドをコピーして各 ViewModel に貼り付けるのではなく、CustomerView にアクセスできる各 ViewModel で OpenCustomerViewCommand のインスタンスを単純に作成できると便利です。 、デリゲートを RelayCommand に渡します。私の理解が正しければ、Cut や Paste などの定義済みの ApplicationCommands はこのように動作します。
私には、ViewModel 内にロジックを提供する必要があるため、コマンド パターンの価値が少し低下するように思えます。この方法で実行することと、UI イベントのコマンド ハンドラーを実装するコード ビハインドを使用することとの主な違いを、私は本当に理解していないと思います。上記で説明したより古典的なアプローチよりも RoutedCommand パターンを使用する必要がある理由はありますか?