У меня похожая ситуация, но мы используем элемент управления Dock, где представления загружаются с использованием Prism. Итак, в коде Shell Views, стоящем за unloaded событием, мы перебираем открытые Views и получаем ViewModel для каждого представления. Все наши ViewModel наследуют от базовой ViewModel, которая имеет виртуальный метод CanClose bool, который возвращает, может ли представление закрыться или нет. Базовая ViewModel просто возвращает true. Этот метод используется для проверки наличия ошибок проверки, несохраненных изменений и т. Д. Итак, тогда вы переопределите этот метод и выполните очистку, о которой вы говорили. Если все представления возвращают true, то вы можете вызвать выгрузку модели представления основной оболочки, если нет, то вы можете отменить выгрузку основного представления.
foreach (var doc in dockManager.Documents)
{
if (!doc.CanClose())
{
e.Cancel = true;
return;
}
}