MVVM: поиск других моделей представления - PullRequest
1 голос
/ 16 июля 2009

В моем приложении MVVM достаточно большое количество моделей ViewModel для родительских деталей. Примерно так:

SchoolsViewModel
  +- SchoolViewModel
      +- LessonViewModel
          +- PupilsViewModel
              +- PupilViewModel
          +- TeacherViewModel
      +- PupilsViewModel
          +- PupilViewModel
              +- LessonsViewModel
      +- TeachersViewModel

И так далее ...

Кроме того, модель одного представления может появляться в нескольких местах в зависимости от того, просматривает ли пользователь урок или ученик и т. Д.

Как вы позволите разделять дочерние ViewModels между разными родительскими ViewModels? Например, «Pupil A» будет присутствовать в PupilsViewModel самого высокого уровня, а также в ряде PupilsViewModel, содержащихся в LessonViewModels. Вы бы создали несколько объектов PupilViewModel, ссылающихся на одну и ту же модель данных? Или как-то найти существующую модель представления для модели данных?

У этого вопроса есть еще один связанный вопрос: Использование MVVM и StructureMap

Ответы [ 2 ]

0 голосов
/ 17 июля 2009

Почему бы не использовать DataTemplates для определения, какой вид будет привязан к каждой модели? А в представлениях вы можете просто использовать ContentPresenter, привязанный к свойству модели родительской модели представления.

Я думаю, это поможет.

0 голосов
/ 17 июля 2009

Я бы предложил иметь только один экземпляр ученика А. Таким образом, когда пользователь обновляет ученика в одном месте, этот ученик обновляется везде в приложении. Для этого вам необходимо реализовать INotifyPropertyChanged на каждой ViewModel, но это стандартная практика в MVVM.

В вашем случае я предлагаю использовать CollectionViews для предоставления разных представлений вашей PupilsViewModel (коллекции) различным частям вашего приложения. Таким образом, они работают с одними и теми же базовыми данными, но разные части приложения могут перемещаться по ним независимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...