私はWPFアプリケーションを構築しており、PRISMパターンライブラリの使用を計画しています。ほとんどすべてのビューで、リストが表示または変更されます。このオブジェクトをどこに配置し、どのようにビューにフィードする必要がありますか。モジュールを1つだけ作成し、そのオブジェクトのリストにオブジェクトを作成し、ビューの作成時にオブジェクトをビューにフィードしてから、さまざまな領域に挿入する必要がありますか?それともそれを行うためのより良い方法はありますか?
2 に答える
Prismは、あなたがやろうとしていることのための非常に便利なパターンライブラリです。http://compositewpf.codeplex.com/をご覧になることをお勧めします。PrismとMVVMのアーキテクチャに関する多くの回答を見つけることができます。モジュールはいくつでも定義できますが、リストの表示や変更のようにビューが類似している場合、最良の方法は、あるビューから別のビューに何が変化しているかを識別することです。バインディング、プロパティ、またはラベル名のように、たとえばテンプレートT4からそれらの異なるビューを生成するために(またはそれらをすべて1つずつ再定義したい場合でも)それは1つの同じモジュールになりますが、たとえば異なるバインディングを持ちます。
複数のビューモデル間で情報を共有する場合(リージョン/モジュールに関係なく)、単一のリストコレクションを格納する共有サービスを実装し、そのサービスを各ビューモデルに挿入できます。次に、各ビューモデルにサービスを介してコレクション内のデータにアクセスさせます。これにより、コレクションでCRUD操作が実行されると、変更がすべてのビューモデルに反映され、すべてのビューにフィードできるようになります。
その共有サービスを使用して非共有エクスポートとしてエクスポートする場合、ObjectRepositoryの同じインスタンスがすべてのビューモデル間で共有されます。サービスのListプロパティを更新するときに、すべてのビューモデルにそれを使用させることができます。ユニティを使用する場合は、シングルトンインスタンスを使用してください。
共有サービスの詳細http://msdn.microsoft.com/en-us/library/ff921122%28v=PandP.40%29.aspx#sec7
- 必要なモジュールは 1 つだけです。モジュールの考え方は、注文管理や顧客管理など、アプリケーションのさまざまな部分を分離することです。
- MVVM 用語に従うと、リストはモデルです。ListModel という名前を付けます。この ListModel は、1 つのビュー モデルでラップする必要があります。これは、ListViewModel という名前にすることができます
- すべてのビューには、ビュー モデルに対応する 1 つのビューがあります。これらのビュー モデルはすべて、ListViewModel への参照を持っています。ListViewModel はプロパティを介してビューに提供されるため、ビューはバインド パス DataContext.ListViewModel を使用して ListViewModel を参照できます。ビューがすべてビューモデルにバインドされている場合、モデルがデータで満たされているかどうかは関係ありません。