Это действительно зависит от архитектуры вашего приложения, но вот как я это делаю с Prism.
Во-первых, я хочу сказать, что ок позволяет вашей виртуальной машине ссылаться на представление, если оно не является конкретной реализацией представления, то есть ссылается на интерфейс.
Я женюсь на View и ViewModel, используя внедрение зависимостей, очень похожее на то, как это делается в StockTraderRI. Итак, у меня есть IView и IViewModel. IViewModel имеет свойство с именем «View» типа IView.
В слое кода (для меня обычно это контроллер ... см. StockTraderRI), который работает с вашими регионами, добавьте механизм для удаления вашего вида из региона.
Например:
myRegion.Remove(myIViewModel.View);
Если регионы обрабатываются контроллером, вы можете захотеть поместить простое событие в ВМ, чтобы уведомить, когда ВМ хочет быть «закрытой». Вы также можете поэкспериментировать с IEventAggregator, если вы хотите использовать слабую модель событий. Если регион обрабатывается в виртуальной машине, просто добавьте туда этот код.