В моем приложении у меня есть несколько моделей ViewModel, которые имеют один сервис (репозиторий, DAO и т. Д.), Назовем его WidgetService , внедренный в них.
Скажем, один из этих ViewModels - это список всех пользовательских виджетов. Другой может быть ViewModel для редактирования / создания одного из этих виджетов.
Пользователь может просмотреть список виджетов в WidgetListView , поддерживаемом WidgetListViewModel , и нажать кнопку, чтобы добавить новый виджет. Чтобы создать этот новый виджет, CreateWidgetViewModel был обновлен и внедрен в DataContext некоторого UserControl / Window, таким образом, посредством волшебства DataTemplates, отображающего CreateWidgetViewModel в CreateWidgetView . Кроме того, обновление CreateWidgetViewModel не обязательно происходит в рамках WidgetListViewModel .
Когда WidgetListViewModel было внедрено с экземпляром WidgetService . CreateWidgetViewModel был внедрен с тем же WidgetService экземпляром.
Теперь, когда пользователь нажимает save в CreateWidgetView , Save метод WidgetService будет вызван и виджет будет быть настойчивым. Теперь WidgetListViewModel необходимо уведомить о появлении нового виджета!
Длинное наращивание приводит к следующему вопросу: как я могу сообщить WidgetListViewModel , что ему нужно отобразить новый виджет?
Я видел Видео , в котором парень из Microsoft делает подобные вещи, используя событие в службе, на которую подписывается ViewModel. Однако недостатком этого является то, что если служба переживает модель представления, тогда модель представления не получит GC'd до тех пор, пока служба не станет GC'd. Я мог бы добавить IDisposable к ViewModel. Но тогда когда / как вызывать Dispose, когда ViewModel представлена только в пользовательском интерфейсе через DataTemplates?
У кого-нибудь есть предложения по этому поводу?
Чтобы уточнить, я бы сказал, что моя интерпретация MVVM наиболее близка к интерпретации Джоша Смита. По крайней мере, в той степени, в которой моя архитектура MVVM довольно близко совпадает с той, что была в источнике Crack.Net.