ProductList が読み込まれる View / ViewModel があります。このリストは画面には表示されません。
私がする必要があるのは、新しいビュー/ビューモデル (例: SelectProductView / SelectProductViewModel) を表示し、それらに ProductList を渡し、ユーザーが特定の製品を選択した後、このビューを閉じて、選択した製品を利用することです。
これを達成するための最良の方法は何ですか?
私はMVVMLightを使用していますが、アイデアはそれだけに限定されるべきではないと思います. 最も簡単な方法は、ビューを作成してそれにコレクションを渡すことですが、これは MVVM に適しているとは言えません。最初の ViewModel から SelectProductViewModel を作成し、それにコレクションを渡すことを考えていましたが、SelectProductView を自動的に作成し、作成した SelectProductViewModel にバインドする方法がわかりません。
編集: 私のアプリケーションでは、ビューの構造は少し複雑です。このビューは画面全体をカバーする必要があるため、基本的に SelectProductView をホストする必要があるメイン ビューがあります。MainView には (タブを介して) 多くの子ビューと孫ビューが含まれているため、製品の選択要求を発行できる 3 つの異なる子ビューまたは孫ビューが存在する可能性があります。また、一部のビューには製品がプリロードされていないため、このタスクはおそらく SelectProductViewModel に伝達する必要があります。
構造の例:
MainView
/ \
ChildViewA ChildViewB
/ \ / \
GrandChildViewA1 GrandChildViewA2 GrandChildViewB1 GrandChildViewB2
したがって、GrandChildViewA1、ChildViewB、および GrandChildViewB2 は、製品を選択するための要求を発行できます。リクエストを発行したビューのみが選択した製品を取得する必要があり、他のユーザーはそれを気にするべきではありません。GrandChildViewA1 には製品がロードされますが、GrandChildViewB2 には ProductList がロードされません。つまり、パフォーマンスのために、GrandChildViewA1 は製品リストを SelectProductViewModel に渡す必要がありますが、GrandCHildViewB2 には製品リストが含まれていないため、SelectProductViewModel はデータベースからデータをフェッチする必要があります。