私の一般的な質問は、タイトルが示すように、ViewModelの構築中、または後でLoadedイベント処理を介してデータをロードするのが最善ですか?
答えは、いくつかのLoadedイベント処理を介した構築後だと思いますが、それがViewModelとViewの間でどのように最もきれいに調整されているのか疑問に思います。
私の状況と私が解決しようとしている特定の問題についての詳細は次のとおりです。
UnityforDIだけでなくMVVMLightフレームワークも使用しています。ネストされたビューがいくつかあり、それぞれが対応するViewModelにバインドされています。ViewModelsは、LaurentBugnionがMVVMLightに組み込んだViewModelLocatorのアイデアを介して、各ビューのルートコントロールDataContextにバインドされます。これにより、静的リソースを介してViewModelを検索し、依存性注入フレームワーク(この場合はUnity)を介してViewModelの有効期間を制御できます。また、Expression Blendで、ViewModelとそれらをバインドする方法に関するすべてを確認できます。
とにかく、ViewModelのObservableCollectionにComboBoxデータバインドされた親ビューがあります。ComboBoxのSelectedItemも、ViewModelのプロパティに(双方向で)バインドされます。ComboBoxの選択が変更されると、これは他のビューとサブビューの更新をトリガーします。現在、MVVMLightにあるメッセージングシステムを介してこれを達成しています。これはすべてうまく機能しており、ComboBoxでさまざまなアイテムを選択すると期待どおりに機能します。
ただし、ViewModelは、一連の初期化メソッド呼び出しを介して、構築時にデータを取得しています。これは、ComboBoxの最初のSelectedItemが何であるかを制御したい場合にのみ問題になるようです。MVVM Lightのメッセージングシステムを使用して、現在、ViewModelのSelectedItemプロパティのセッターが更新をブロードキャストし、他の関心のあるViewModelがコンストラクターのメッセージに登録するように設定しています。現在、構築時にViewModelを介してSelectedItemを設定しようとしているようですが、サブViewModelの構築と登録はまだ許可されていません。
ViewModel内のSelectedItemのデータロードと初期設定を調整するための最もクリーンな方法は何でしょうか?私は本当に、ビューのコードビハインドを合理的な範囲でできるだけ少なくすることに固執したいと思っています。ViewModelがデータのロードを確認し、データのロードを続行してセットアップフェーズを完了する方法が必要だと思います。
よろしくお願いします。