私は、デザイナーが Visual Studio のインターフェイスに似たタブ付きインターフェイスを必要とする Silverlight LoB アプリに取り組んでいます (タブのドッキングにはおそらく Telerik Rad コントロールを使用します)。プロトタイプを作成したので、これまでのところインターフェイスはうまく機能していますが、MVVM プロジェクトで元に戻す/やり直し機能を実装する方法を考えるのに問題があります。
元に戻す/やり直し機能は、次のことを行う必要があります。
- 元に戻す/やり直しの際に、UI の状態を復元します。つまり、フォーカスや選択などを変更元のコントロール (テキスト ボックスなど) に戻します。
- ビューごとの取り消し/やり直しスタックを持つ
通常、コマンド パターンを使用しますが、それを MVVM に適用する方法がわかりません。
ビューとビューモデルの理想的な疎結合を得るためにコマンドとバインディングを使用しましたが、ビューモデルにはビューと状態の概念がないため、元に戻す/やり直しが非常に難しくなります。コマンドが受信されたとき、またはバインドされたプロパティが変更されたときのビュー。ユーザーが取り消し可能なアクションを実行し、後で復元するために状態を取得するたびに、どのビューがアクティブであるかを追跡するサービスが必要なようです。
MVVM で元に戻す/やり直しを実装するためのベスト プラクティスについて、コンセンサスはありますか? Daniel Vaughan が彼の Calcium プロジェクトでどのようにそれを行っているかに興味を持って見てきました。Blend は明らかに MVVM パターンを使用して作成されており、私のアプリが望んでいるように動作します。