Каковы общие отношения между представлениями, моделями и моделями представления? - PullRequest
4 голосов
/ 27 мая 2011

Я работаю над приложением для Windows Phone 7 с дизайнером.Я занимался разработкой для C # с XNA, поэтому я знаю C #, но не был знаком с архитектурой Model / View / ViewModel.

В нашей первой попытке было задействовать несколько ViewModels для любого данного представления.Каждая ViewModel была промежуточным слоем для каждого объекта в нашей модели.

Например: у нас была страница «Друзья» с ListBox, которая отображает список друзей.Таким образом, мы сделали FriendsListViewModel, который будет обрабатывать получение ObservableCollection<Friend> от модели, с которой связывается XAML.На этой странице были доступны другие функции (переход на другие страницы, активация частично связанных функций и т. Д.), Которые содержались в FriendsPageViewModel.

Это начинало казаться мне безумным, поэтому я сделалотношения между View и ViewModel 1: 1.

Со всем, что описано, у меня возник вопрос с двумя компонентами: каковы MVPM отношения между Views и ViewModels?(здесь основное внимание уделяется разработке Windows Phone 7 в случае, если она отличается от ASP.NET, WPF или Silverlight)

И, как возможное дополнение к этому вопросу: скажем, соотношение 1: 1 является в целом правильным или приемлемымпервый: если вы имеете дело с чем-то вроде Pivot элемента управления или Panorama элемента управления, вы обычно предоставляете каждому PivotItem или PanoramaItem свой собственный ViewModel?

1 Ответ

3 голосов
/ 27 мая 2011

В MVVM у вас обычно есть одна ViewModel для каждого View (существуют исключения).Представление обычно «привязывается» к ViewModel, которая является связующим звеном между представлением и моделью данных.Ваше представление может содержать несколько элементов управления, и каждый элемент управления будет привязан к определенному свойству (то есть источнику данных) в вашей ViewModel.Затем ViewModel уведомит View, как только одно из этих свойств будет обновлено (через интерфейс INotifyPropertyChanged в C #).

Когда вы думаете о ViewModels, не думайте об этом как об одной ViewModel для элемента управления.Подумайте о привязке элемента управления к одному свойству общего ViewModel.

ViewModel предоставляет данные из модели в View.Представление должно использоваться только для отображения данных, которые он получает из ViewModel.Сохраняйте код в представлении как минимум и относящийся только к элементам управления рендерингом.ViewModel отвечает за запрос данных из любого источника данных, а затем за предоставление общедоступных свойств, к которым может подключиться View.

Эта ссылка MSDN содержит довольно подробную статью, но выможно получить хороший обзор википедии .

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