Чтобы сделать представление полностью независимым от модели, вам необходимо воспроизвести типы, которые во многих случаях идентичны типам модели в вашей модели представления.
* ** 1003 тысяча два * Пример
Модель содержит тип Person
, обладающий свойствами FirstName
и LastName
. Визуальный дизайн требует «Список людей», поэтому существует представление, содержащее ListBox, который имеет привязку шаблона данных к путям свойств FirstName
и LastName
. ItemsSource
привязывается к свойству ViewModel, которое предоставляет набор экземпляров типов, имеющих свойства FirstName
и LastName
.
Итак, вот вопрос, должна ли быть "версия ViewModel" типа Model Person
или ViewModel просто повторно использует существующий тип Person
из Модели?
В любом случае вполне возможно, что вы захотите, чтобы свойства были наблюдаемыми.
Для рассмотрения
Какие цели стоят за MVVM? Довольно часто мы хотели бы представить хорошие длинные списки того, почему шаблон существует, но в этом случае на самом деле есть только 2.
- Отделяйте визуальный дизайн ( примечание : не дизайн) от кода.
- Максимизируйте тестируемую поверхность всего приложения.
Предоставление типов моделей в ViewModel не является препятствием ни для одной из вышеуказанных целей. Фактически это помогает тестируемости, так как число типов и членов, которые нуждаются в тестировании, сокращено.
По моему мнению, я не вижу, чтобы реализация INotifyPropertyChanged подразумевала привязку к визуальным элементам. Могут быть и другие причины, по которым некоторые службы могут захотеть наблюдать изменения в свойствах модельного объекта.
Ключевой принцип отделения модели от представления заключается в том, чтобы скрыть любые подробности о том, как представление представляет модель из самой модели. Добавление свойства ForenameBackColor
к модели, вероятно, было бы плохо. Вот где приходит ViewModel.
Итог
Требование, чтобы Модель выставляла наблюдаемые свойства, не является нарушением MVVM, это простое и общее требование, которое не требует, чтобы Модель обладала какими-либо конкретными знаниями о каком-либо Представлении или действительно, что вообще существуют какие-либо «визуалы».