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