Лично я предпочитаю либо вызывать события в моей ViewModel, чтобы сигнализировать представлению о том, что ему нужно сделать что-то вроде открытия окна.Однако я стараюсь не делать этого напрямую, чтобы не видеть в своем ViewModel такие вещи, как событие с именем OpenWindow, потому что, на мой взгляд, это нарушает разделение между View и ViewModel.Вместо этого я мог бы иметь свойство, которое изменяет состояние и вызывает соответственно событие PropertyChanged, в котором представление может прослушивать, а затем принять решение открыть окно в ответ на этот сигнал.В некоторых случаях открытие окна вообще не связано с чем-то в ViewModel и является только функцией View.В этих случаях я совершенно не боюсь размещать код для открытия другого представления в части кода с выделенным кодом.
Шаблон-посредник только делает это более свободно связанным и позволяетдля возможностей, где основное окно приложения View или вложенный View может прослушивать сообщения глобально в приложении, не имея прямого доступа к ViewModels, чтобы прикрепить обработчики событий и тому подобное.Чтобы отфильтровать сообщения, которые не имеют отношения к делу, вы можете посмотреть на какое-либо значение источника сообщения или другое указание на то, откуда исходит сообщение.Для тех, кому нравится идея Windows Messages и как это работает между различными элементами управления (Windows) в рамках неуправляемой разработки и разработки WinForms, может быть способ понять, что система может быть построена поверх посредника, который передает сообщения.