Предлагаю вам прочитать this question (and my answer), так как это похоже, но не совсем ваша проблема. Он имеет дело с сообщением свойств между родительскими/дочерними объектами ViewModel.
Давайте посмотрим на простой пример:
ViewModelA
является родителем и должен представить Сумму некоторого свойства на B
ViewModelB
является ребенок и имеет свойство, которое нуждается в суммирующий
Таким образом, пользователь делает запрос на редактирование свойства на B и запрос успешно завершен, поэтому B предположительно изменяет значение его свойства и запускает событие PropertyChanged
.
ViewModelA
может подписаться на мероприятия для всех детей, но, пройдя этот путь, мне это не нравится. Когда детей добавляются и удаляются, у вас есть много бухгалтерии.
Ввод А в В является более чистым, но у вас все еще есть много бухгалтерии. Что делать, если у вас есть действие «Очистить детей» на A? Вы должны помнить, что нужно правильно избавиться от родительских отношений от B до A во всех случаях. Тем не менее, это лучше событий, на мой взгляд, потому что это более явное.
Лично мне нравится идея обмена сообщениями. Я больше знаком с посланником MVVM Light, чем с Призмами, но это та же самая идея ... глобальная шина сообщений. В любое время любой B может сказать: «Я изменил свою собственность!» а затем А прослушивает уведомление и сам вычисляет. Я думаю, что это ваше самое чистое решение с гораздо меньшим количеством бухгалтерии.
В результате я создал MessagingService, который обертывает действия Publish/Subscribe/Unsubscribe EventAggregator. MessagingService вводится в класс ViewModelBase, который я использую, чтобы любой ViewModel в моем приложении мог его использовать. –
@ Крис Суэйн - Мне это нравится. Это подход, который я буду использовать в будущем, если бы мне пришлось иметь ViewModel для связи ViewModel. Однако в моей недавней работе я избегал всех случаев этого, заставляя все общение через Модель. Когда что-то изменяется в Модели, мой Ведущий знает об этом и сообщает ViewModel верхнего уровня, что что-то могло измениться. Затем он передает уведомление по дереву и всем дочерним, внукам и т. Д., ViewModels проверяет свои данные модели, чтобы увидеть, есть ли какие-либо изменения. –