2009-08-12 1 views
1

Я довольно новый для MVVM и у меня есть несколько вопросов:MVVM вопросы: определение модели, оберточная модели объекты и модальный диалог

является модель = бизнес-слой?

Если у меня есть модель клиента, которая содержит список заказов и список или заказы, каждый содержит список элементов, как бы вы отделили это в представлении? На данный момент у моего CustomerModel есть CustomerViewModel. CustomerViewModel содержит список OrderViewModel. OrderViewModel содержит список ItemsViewModel. Поэтому, если я, например, получаю существующего клиента из слоя данных, тогда я создам соответствующие OrderViewModel и ItemViewModel на основе существующего списка. Это как обычно вы используете mvvm? Честно говоря, весь «перевернутый объект» действительно не чувствует себя хорошо.

My customerview содержит список заказов и элементов, каждый из которых представлен собственным пользовательским контролем и повторяется с использованием ItemsControl. каждый элемент имеет свою собственную кнопку добавления, редактирования и удаления. Я хочу иметь какое-то модальное диалоговое окно, которое отключает текущую вкладку (не все приложение), в то время как пользователь должен представить соответствующую форму. Самое легкое решение, которое я нашел, - это создание элемента управления содержимым, у которого есть элемент управления dp (с именем Control), который вы можете установить и автоматически создать наложение прямоугольника, когда isVisible = true. Затем управление привязано к свойству dialogControl CustomerViewModel .... Я не рассматриваю это как правильное решение mvvm, поскольку я, кажется, путаю viewmodel с представлением. Я думаю, что более правильный способ будет иметь viewmodel в customerviewmodel, которые представляют то, что содержит диалог, и предоставить шаблон для этого в каждой модели view ...., но я, похоже, не в состоянии думать о способе реализации наложения прямоугольника с помощью это решение.

Спасибо!

ответ

0

Я тоже борюсь с этой идеей. Кажется, вы должны повторить себя между моделью и ViewModel. Основная причина этого заключается в том, что Модель имеет тенденцию быть традиционным объектом, а ViewModel реализует INotifyPropertyChanged. Для меня это разница - ViewModel поддерживает двунаправленную привязку.

Как только я подумал об этом, модель станет необязательной. В моем случае модель обычно представляет собой некоторый код библиотеки, который я приношу, или созданный слой доступа к данным. Или, говоря иначе, ViewModel содержит функциональные возможности, а модель - хранилище резервных копий.

Я даже перестал называть классы ViewModel xxxViewModel или xxxVM. Теперь они просто ххх. Однако все они реализуются из IViewModel, который сам по себе наследуется от INotifyPropertyChanged.

Что касается использования пользовательских элементов управления, я смог уйти от использования только DataTemplates для своих просмотров. В случае ваших вкладок, ViewModel вкладки должен запустить модальный диалог и в то же время должен установить для свойства Enabled значение false, пока диалог открыт. Ваша вкладка View должна отключить себя, если видит, что свойство Enabled имеет значение false.

+0

Я согласен с вашим определением и различиями между ViewModel и Model, но что вы делаете для свойств, поддерживаемых на уровне модели, которые должны быть открыты через привязку? Может ли уровень модели реализовать INotifyPropertyChanged, а если нет, как бы вы получили свойство на модели для изменения пузырьков до представления? – ScottCher

+0

@ScottCher: Это действительно архитектурная проблема. Просто нет возможности автоматически пузырьки всех изменений на обычный-старый объект до ViewModel, который его обертывает, если вы не определяете события для этого. В моем случае я использую объекты неизменяемой модели, поэтому у меня нет этой проблемы. ;) –

Смежные вопросы