Silverlight MVVM: MainView с SubViews или MainViewModel с SubViewModels - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть MainView с пользовательским интерфейсом с вкладками.

Как добавить новый TabItem (= View) в TabControl? В основном я вижу 2 способа:

1.)
* из кода в MainView я могу добавить новую вкладку.
* новая вкладка содержит представление со ссылкой на его модель представления.

2.)
* из кода в MainViewModel я могу добавить новую viewmodel в список childViewModels
* tabcontrol mainView привязан к этому списку

Я предпочитаю случай №1 как-то, потому что я думаю, что представление должно знать и создавать экземпляр своей виртуальной машины (может быть, используя MVVM light ViewModelLocator), а не наоборот.
Но как я могу сослаться с недавно созданной виртуальной машины на MainVM? Например: MainVM имеет свойство IsAdmin; Как я могу получить доступ (связать) это свойство из SubViewModel?

альтернатива # 2: как TabControl узнает, какое представление должно быть «визуализировано» для разных ViewModels? Как я могу "отобразить" из SubViewModels в соответствующие "SubViews"?

Спасибо, что поделились своими идеями!

Ответы [ 2 ]

0 голосов
/ 14 апреля 2011

Томас,

MVVM действительно является MVVMC.Я бы посоветовал иметь контроллер для MainView, который содержит метод для создания новой вкладки.Если TabControl сложен, вы можете поместить функциональность в сам TabControl.

Разделение проблем (модель против VIEWMODEL против VIEW против CONTROLLER) нарушается, если в моделях имеется функция активации(M или VM).

С уважением,

Гвидо

0 голосов
/ 13 апреля 2011

Я бы проверил этот пост SO , так как ответ может быть применен, чтобы помочь вам с вашей проблемой.

В духе MVVM вы захотите следовать альтернативе # 2.Позвольте вашей логике ViewModel помочь вам определить, какие «вкладки» вам нужно отображать, и использовать шаблоны данных для представления этих объектов.Затем вы привязываете их к DataContext представления, и ваша привязка в DataTemplate (представление) будет работать правильно.

...