У вас есть два типа используемых элементов управления:
ContentControl и TabControl будут использовать адаптер области, используя SingleActiveRegion.По сути, за один раз может отображаться только одно представление.
Вероятно, оба Grid и ItemsControl - это AllActiveRegion (ItemsControl определенно не знает о вашем GridAdapter), что означает, что они могут отображать несколько представлений одновременно.
Глядя на NavigationService, который использует Регион для перехода от представления X к представлению Y, вот что происходит:
Уведомляет активное представление о том, что это недольше активен.
Загружает новый вид.Если он уже есть (и представление реализует IActiveAware), он будет реактивирован.В противном случае он создает новый экземпляр представления
Запускает событие навигации
Информирует представление «y», к которому он перемещается.Опять же, представление должно реализовывать IActiveAware
Повышает NavigatedEvent.
Итак:
Ваши представления реализуют IActiveAware?
Что еще более важно, если вы используете контейнер, который может отображать несколько представлений одновременно (ItemsControl и т. Д.), То я думаю, что вам нужно будет вручную удалить представление из области, потому что Prism не собирается делатьэто для вас!
Вы можете сделать это довольно легко.Вы можете написать свой собственный класс, который реализует INavigationService, а затем вставить его в свойство NavigationService региона.Это дает вам контроль над тем, что делает навигационная служба.
Надеюсь, это поможет.