Краткий ответ: ДА.Используйте свои интерфейсы уведомлений в вашей модели, когда вам нужно уведомлять об изменениях.Не беспокойтесь об этом.Будьте прагматичны.
Длинный ответ: Моя философия заключается в следующем: при реализации MVVM выполняйте привязку напрямую к объектам модели, когда делать больше нечего.Когда вам нужно что-то новое (новое поведение, свойства, которые будет использовать представление и т. Д.), Тогда вы оборачиваете объекты модели в объекты ViewModel.Модель ViewModel, которая не делает ничего, кроме делегирования данных из модели, является не чем иным, как дополнительным кодом.В тот момент, когда вам нужно что-то сделать с этими данными после того, что дает вам объект модели, вы вводите слой.
Итак, чтобы продолжить мои мысли по этому поводу (и ответить на ваш вопрос более прямо), естьдолжен быть способ для модели сообщать ViewModel, когда что-то меняется.Зачастую данные модели являются неизменяемыми, поэтому для них не требуется этот механизм уведомлений, поэтому в этом нет необходимости.НО, это также часто бывает, что модель меняется.Когда это происходит, модель имеет два варианта: использовать пользовательский метод уведомления (события, делегаты и т. Д.) Или использовать INotifyPropertyChanged
.
Если вы посмотрите на пространство имен для INotifyPropertyChanged
, оно находится в System.ComponentModel
, а не в виде, поэтому я предпочитаю использовать его в модели.Это хорошо известный интерфейс, и вы можете использовать его для непосредственного связывания с вашей моделью с вашей точки зрения.Не нужно реализовывать что-то другое.
Если продвинуть эту философию на один шаг дальше, ObservableCollection
в System.Collections.ObjectModel
- также не зависит от вида - и он реализует System.Collections.Specialized.INotifyCollectionChanged
, который также не зависит от вида.,Другими словами, ObservableCollection
был разработан как коллекция, которая уведомляет своих наблюдателей об изменениях.Если у вас есть модель, которая должна это сделать, тогда ObservableCollection
- ваш инструмент.Просто бывает удобно (хотя и не случайно), что WPF и Silverlight используют эти интерфейсы для привязки данных.
Я полагаю, что это довольно многословный способ сказать: «ДА. Используйте свои интерфейсы уведомлений навашей модели, когда вам нужно уведомить об изменениях. Не беспокойтесь о том, чтобы запутать ваш код этим. Будьте прагматичны. "