3

ビュー/ビューモデル間の疎結合をサポートするために、作業中の UI プロジェクト (Silverlight/MVVM) でイベント アグリゲーター パターンを利用することを検討しています。簡単なイベンティング システムを使用していくつかの画面を作成しました。この時点では概念実証にすぎませんが、疎結合システムを作成するための非常に洗練されたソリューションのように思えます。

私が直面している問題は、受信ビューモデルがまだインスタンス化されていないときに、あるビューモデルから別のビューモデルにデータを渡すことです。たとえば、Customer List 画面が開いている場合、ユーザーは特定の顧客をクリックして、Customer Detail の編集/表示画面 (おそらく子ウィンドウ) を開くことができます。顧客の詳細画面が機能するには、顧客 (または顧客 ID) が必要です。

したがって、OpenCustomerDetailEvent に関連する顧客情報が含まれていることは妥当と思われますが、その情報を Customer Detail V/VM に挿入するためのオプションにはどのようなものがありますか? イベントが処理されるときはまだメモリ内にないため、イベントを直接リッスンすることはできません (それ自体がハンドラーになることはできません)。ビューとビュー モデルの両方を作成するために依存性注入コンテナーを使用しているため (現在は「ビューを最初に」実行しています)、別のハンドラーにコンストラクターを介してデータを注入させることは適切なオプションではありません。

データが構築されたら、View(Model) にデータを取得するための他のオプションは何ですか? 厳密に型指定されたパラメータを取る init メソッド? セッターを使用してデータを注入しますか? ハンドラーに V/VM を作成させてから、VM がリッスンする 2 番目のイベントをディスパッチしますか?

4

1 に答える 1

2

この目的のために、シルバーライト アプリケーションでPrism Framework を使用しています。EventAggregator パターンとビュー ナビゲーション インフラストラクチャの実装を提供します。

プリズムの場合、使用するデータと初期化するデータをビュー/ビューモデルに提供する NavigationParameters を使用します。ビュー/ビューモデルがまだ作成されていない場合、EventAggregator パターンは役に立ちません。イベントにまだ登録されていないためです。

独自のフレームワークに依存したい場合は、プリズム フレームワークでビュー ナビゲーションがどのように実装されているかを見て、独自のフレームワークの一部をピックアップします。

個人的には、プリズム フレームワークを使用することをお勧めします。

于 2011-05-23T06:52:12.257 に答える