RoutedCommandとRoutedUICommandには多くの利点があります。テキストとキーボードジェスチャのサポートが組み込まれています。RoutedUICommandsのコレクションをMenuのItemsSourceにバインドすると、メニュー項目が自動的に作成されてバインドされます。一部のコマンド(切り取り、コピー、貼り付け)は、すぐに使用できるコントロールによって自動的にサポートされます。
ただし、MVVMを使用するときはいつでも、ボイラープレートXAMLとコードビハインドが繰り返されるため、ルーティングされたコマンドは適切ではないことがわかりました。MVVMを実行しているときは、通常、ルーティングされたコマンドの代わりにRelayCommandを使用することになります。これは、適切な回避策である場合もありますが、欠点があります。たとえば、キージェスチャがはるかに複雑になります。
しかし、Rob Eisenbergの「独自のMVVMフレームワークを構築する」セッションを見た後、リレーコマンドとその欠点に満足できなくなりました。ルーティングされたコマンドの唯一の問題は反復的なボイラープレートコードでした。その反復的なコードをフレームワークに組み込み、規則を適用すると、MVVMでルーティングされたコマンドを使用しない理由はなくなったようです。
技術的には、これは難しいことではないようです。フレームワークは、ビューのCommandManager.CanExecuteイベントとExecutedイベントにバインドし、規則を適用してViewModelのメソッドとプロパティを探す必要があります。たとえば、Cutコマンドを実行するときは、ExecuteCutメソッド(およびCanExecuteCutプロパティ)を探します。 )ViewModelで。これを簡単にする独自のMVVMフレームワークを構築できました。
しかし、私の質問は、RoutedCommandで動作するMVVMフレームワークはすでにありますか?私が深く知っている唯一のMVVMフレームワークはCaliburn.Microであり、現在この方法でルーティングされたコマンドをサポートしていません(これは、独自のアクションバブリングのフレーバーをサポートしているため、私を驚かせます)。