Как сохранить логику представления из модели и бизнес-логику из модели представления в MVVM?

Я не могу выяснить, как получить вид на модели должны быть уведомлены об изменениях в модели без добавления кучу пользовательского интерфейса специфические вещи, вроде INotifyProperyChanged и INotifyCollectionChanged в моей модели или создавать тонн различных событий и делать кучу вещей, которые чувствуют, что они ИП конкретными и должны держаться подальше от модель.

в противном случае мне просто нужно будет дублировать всю бизнес-логику в модели представления, чтобы убедиться, что все обновлено, а затем что смысл модели тогда?

один из сложных, которые у меня есть в моей модели, является свойством класса "категория". Вы можете думать об этом как о древовидной структуре, а свойство-все потомки листового узла. Ну, в модели это свойство генерируется на лету рекурсивно через всех его детей, что все хорошо и хорошо. Однако модель представления должна привязываться к этому свойству и должна знать, когда оно изменяется. Должен ли я просто изменить модель, чтобы приспособить модель представления? Если я это сделаю, то модель представления на данный момент ничего не делает, модель вызывает все необходимые уведомления об изменениях, и представление может просто привязываться прямо к модели. Кроме того, если бы модель была чем-то, что у меня не было источника, как бы я обошел это?

1 ответов


Я не согласен с этим INotifyPropertyChanged и INotifyCollectionChanged интерфейс-конкретными. Они находятся в пространствах имен и сборках, которые не привязаны к какому-либо конкретному стеку пользовательского интерфейса. По этой причине я обычно ставлю такое поведение как можно ниже в системе (обычно на уровне данных).

Если есть какая-то причина, по которой вы не хотите ставить ее на этот уровень, это нормально. Вы можете поместить его на более высокий уровень, такой как сервис или уровень пользовательского интерфейса. Однако необходимо убедиться, что все изменения в структурах данных происходят и через этот слой тоже.