Хорошим решением вашей проблемы было бы использование EventAggregator of Prism.
Этот сервис позволяет вам прослушивать и публиковать события определенного типа из любой точки вашего приложения, не привязывая ваши модели представления к каждомуДругой.Это действительно хорошее решение для MVVM и других конструкций со слабой связью.Это просто и работает как шарм.
Документацию можно найти здесь: EventAggregator Подробнее о Prism здесь: Prism на Codeplex
Вот конкретный образец.Представьте, что вы хотите изменить заголовок главного окна из любой точки приложения.Вы должны создать это событие:
public class TitleChangedEvent : CompositePresentationEvent<string>{}
Затем вы добавите это событие в свою MainWindowViewModel следующим образом:
eventAggregator.GetEvent<TitleChangedEvent.Suscribe(
(newTitle) =>
{
this.WindowTitle = newTitle;
});
И, наконец, вы можете обновить заголовок из любого места в вашем приложении, например:это:
eventAggregator.GetEvent<TitleChangedEvent>().Publish("This is a new title!");
Довольно просто, как вы можете видеть.
С улыбкой с MVVM Light вы сначала создадите сообщение для уведомления:
public class TitleChangedMessage : GenericMessage<string>{}
Затемвы бы прослушали подобное сообщение в вашей MainWindowViewModel:
Messenger.Register<TitleChangedMessage>(this,
(message) =>
{
this.WindowTitle = message.Content;
}
и отправили бы обновление следующим образом:
Messenger.Send<TitleChangedMessage>(this, new TitleChangedMessage("This is a new title!"));
Это MVVM Light способ сделать это :)
Вы также можете взглянуть на этот связанный вопрос: Класс Messenger в MVVM Light