Из одного из ваших комментариев:
мне кажется странным, что модель реализует INotifyPropertyChanged, который мне кажется классом, связанным с пользовательским интерфейсом
Изменить уведомлениеиспользуется во всех контекстах, но не в контекстах пользовательского интерфейса.Например, вы можете захотеть прикрепить часть диагностического кода, который регистрирует конкретные изменения в TextWriter
.Это легко сделать без изменения базового объекта модели, если объект реализует уведомление об изменении.
Но даже в приложении, где он используется только для обновления пользовательского интерфейса, этот шаблон все еще имеет смысл.Поскольку уведомление об изменении обрабатывается через событие, объект, вызывающий событие, отделяется от объекта, который его обрабатывает.Ваша модель не знает и не должна знать, какой интерфейс использует ее.Он просто говорит: «Предполагая, что есть пользовательский интерфейс, я должен сказать ему, что бы это ни было, что значение этого свойства только что изменилось».
Так почему же существует модель представления?Почему бы просто не привязать к модели напрямую?На самом деле, вы можете просто привязаться к модели напрямую, если она реализует уведомление об изменении.Во многих простых приложениях WPF необязательно иметь отдельную модель представления - вы можете просто внедрить уведомление об изменении в модель и назвать его днем.Когда вам нужно отделить пользовательский интерфейс от базовой бизнес-логики, и вы начинаете беспокоиться о том, нарушаете ли вы принцип единственной ответственности, возникает необходимость в модели представления.