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