Как организовать составные представления в WPF MVVM с отношением один ко многим? - PullRequest
0 голосов
/ 31 мая 2018

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

Это все нормально, когда есть все, но я не уверен, как организовать вещи, когда есть родительдетские отношения.Скажем, у нас есть объект Order, который имеет свойства (имя клиента, адрес и т. Д.), Которые отображаются в представлении заказа.Таким образом, OrderView связывается с OrderViewModel, который имеет ссылку на объект Order (модель).Каждый объект Order имеет список объектов OrderItem (модель), которые имеют такие свойства, как элемент, общее количество и т. Д.

Теперь OrderView должен отображать список OrderItems (скажем, в GridView) и связываться со свойствомВызываемые элементы в OrderView.Каким должен быть тип этого свойства?Если это List, то out view привязывается непосредственно к объекту модели, что противоречит принципам, которые я упомянул в начале, и наш объект OrderItem действительно реализует INotifyPropertyChanged.Должен ли OrderItem быть «обернутым» в какой-то объект VM, и если да, то как мы должны его назвать - OrderItemViewModel?Я не уверен, что это хорошо подходит, поскольку это не модель представления представления элемента заказа - он просто предоставляет свойства для привязки GridView, и это имя конфликтует с классом OrderItemViewModel, описанным ниже

Теперь давайтескажем, у нас есть OrderItemView, который является UserControl, который является дочерним по отношению к OrderView.Его роль заключается в отображении выбранного в настоящий момент элемента заказа в OrderView.Правильно ли я говорю, что это модель представления должна называться OrderItemViewModel, и она должна иметь ссылку на текущий выбранный порядок, который установлен OrderViewModel, поэтому OrderViewModel знает модель представления OrderItem?

1 Ответ

0 голосов
/ 31 мая 2018

Так что я думаю, классы моделей не должны реализовывать измененный INotifyProperty, поскольку это обрабатывается моделью представления.

Это зависит от того, как вы определяете модель.Модель - это, как правило, услуга какого-либо вида, с которой вы можете внедрить модель представления.Или объектный объект на стороне сервера, содержащий бизнес-логику.

Тип, к которому вы привязываетесь в представлении, может рассматриваться как «дочерний» представление модель.Например, если ваш класс OrderViewModel предоставляет следующее свойство:

public ObservableCollection<Order> Orders { get; }

.., то прекрасно, что представление связывается со свойствами класса Order, а последний реализует INotifyPropertyChanged и любой другой связанный с клиентом материал.В этом случае Order фактически является моделью представления, а не фактической моделью.

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