Мой общий вопрос заключается в том, что в заголовке говорится, лучше ли загружать данные во время построения ViewModel или после какой-либо обработки Loaded-событий?
Я предполагаю, что ответ получен после построения с помощью некоторой обработки Loaded-событий, но мне интересно, как это наиболее четко скоординировано между ViewModel и View?
Вот более подробная информация о моей ситуации и конкретной проблеме, которую я пытаюсь решить:
Я использую инфраструктуру MVVM Light, а также Unity для DI. У меня есть несколько вложенных видов, каждый из которых связан с соответствующей ViewModel. ViewModels связаны с каждым корневым элементом управления DataContext через идею ViewModelLocator, которую Лоран Буньон добавил в MVVM Light. Это позволяет находить ViewModels через статический ресурс и управлять временем жизни ViewModels через платформу Dependency Injection, в данном случае Unity. Это также позволяет Expression Blend видеть все, что касается ViewModels и как их связывать.
Так или иначе, у меня есть родительский View, имеющий привязку ComboBox к ObservableCollection в его ViewModel. SelectedItem ComboBox также привязан (двусторонний) к свойству в ViewModel. Когда выбор ComboBox изменяется, это вызывает обновления в других представлениях и подпредставлениях. В настоящее время я выполняю это через систему сообщений, которая находится в MVVM Light. Все это прекрасно работает и, как и следовало ожидать, когда вы выбираете различные элементы в ComboBox.
Тем не менее, ViewModel получает свои данные во время сборки через серию вызовов методов инициализации. Это кажется проблемой только в том случае, если я хочу контролировать исходный SelectedItem ComboBox. Используя систему обмена сообщениями MVVM Light, я в настоящее время настроил ее так, что установщик свойства SelectedItem ViewModel - это тот, который передает обновление, а другие заинтересованные ViewModels регистрируют сообщение в своих конструкторах. Похоже, что в настоящее время я пытаюсь установить SelectedItem через ViewModel во время построения, что еще не позволило создавать и регистрировать под-модели моделей.
Каким будет самый чистый способ согласовать загрузку данных и начальную настройку SelectedItem внутри ViewModel? Я действительно хочу придерживаться минимального количества кода в представлении, насколько это разумно. Я думаю, что мне просто нужен способ, чтобы ViewModel мог узнать, когда что-то загрузилось, и затем он может продолжить загрузку данных и завершить этап установки.
Заранее спасибо за ваши ответы.