Я категорически не согласен с концепцией, что Модель не должна реализовывать INotifyPropertyChanged
. Этот интерфейс не зависит от пользовательского интерфейса! Это просто сообщает об изменении. Действительно, WPF активно использует это для выявления изменений, но это не значит, что это интерфейс пользовательского интерфейса. Я бы сравнил это со следующим комментарием: « Шина - это автомобильный аксессуар ». Конечно, но велосипеды, автобусы и т. Д. Тоже им пользуются. Итак, не воспринимайте этот интерфейс как интерфейс.
Сказав это, это не обязательно означает, что я считаю, что Модель должна предоставлять уведомления. На самом деле, как правило, модель не должна реализовывать этот интерфейс, если в этом нет необходимости.В большинстве случаев, когда данные сервера не передаются клиентскому приложению, модель может устареть. Но если слушать данные финансового рынка, то я не понимаю, почему модель не может реализовать интерфейс. Например, что если у меня есть логика, не связанная с пользовательским интерфейсом, например, служба, которая, когда она получает цену Bid или Ask для данного значения, выдает предупреждение (например, по электронной почте) или размещает заказ? Это может быть возможным чистым решением.
Тем не менее, существуют разные способы достижения цели, но я бы всегда выступал за простоту и избегал избыточности.
Что лучше? Определить события в коллекции или изменения свойств в модели представления и распространить их на модель или иметь представление, чтобы обновить модель (через модель представления)?
Суть в том, что когда вы видите кого-то, заявляющего, что « вы не можете делать то или это », это признак того, что он не знает, о чем говорит.
Это действительно зависит от вашего случая, и на самом деле MVVM - это фреймворк с множеством проблем, и мне еще предстоит увидеть общую реализацию MVVM по всем направлениям.
Хотелось бы, чтобы у меня было больше времени, чтобы объяснить множество разновидностей MVVM и некоторые решения общих проблем - в основном, предоставленные другими разработчиками, но, думаю, мне придется сделать это в другой раз.