Я не гуру PRISM / MEF, но, если бы я атаковал эту проблему, я бы использовал немного другой подход и добавил бы немного больше развязки. По сути, вы хотите, чтобы ViewModels ваших окон (Shell и Popup) взаимодействовали - окна ( Views ) должны взаимодействовать только с пользователем и обновлять свойства (в развязанном, привязанном к модели стиле). ) на их ViewModels .
Как только вы окажетесь в этом положении, ViewModel Shell может запросить информацию о пользователе (скажем, из свойства) Popup ViewModel . Хотя, конечно, они не являются ViewModels ни Shell, ни Popup - они являются просто ViewModels , с которыми эти виды связаны:)
Пуристы пойдут еще дальше и расскажут об очередях сообщений между различными связывающимися сторонами, но, по-моему, один шаг за раз.
Dan
Редактировать
После комментария Михаила:
Как я уже сказал, я не эксперт в PRISM, но я думаю, что это зависит от того, насколько далеко вы хотите пойти с разделением. Ничто не мешает клиентской ViewModel создавать и показывать всплывающее окно, а затем запрашивать у ViewModel всплывающего окна данные перед их удалением. Это не чистый MVVM, потому что ваш клиент ViewModel осуществляет довольно прямую связь с Popup и его ViewModel, но он будет работать, и это не такой большой грех.
Я бы пошел с прагматическим подходом в таких случаях, когда, в любом случае, существует естественная зависимость. У вас все еще есть разделение View и ViewModel.
Я полагаю, что здесь есть люди, которые могут обучить более разобщенному подходу, о котором мне также было бы интересно прочитать.