9

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であり、現在この方法でルーティングされたコマンドをサポートしていません(これは、独自のアクションバブリングのフレーバーをサポートしているため、私を驚かせます)。

4

2 に答える 2

2

SOや他のサイトで多くの研究マラソンがありましたが、RoutedCommandで遊ぶための適切なフレームワークが見つかりませんでした.

しかし、WPF Disciple Josh Smithの 1 人が、 MVVM で Routed Command を使用する優れたソリューションを実装しました。

これは、MVVM アーキテクチャで RoutedCommands を使用するためのクリーンで軽量であると述べられています

于 2011-01-11T14:33:32.553 に答える
1

私の記憶が正しければ、サシャ・バーバーがその方向で何かをしたと思います

于 2011-01-10T13:00:13.803 に答える