У меня есть регион, в котором одновременно может быть только одно активное представление. Я хочу добавить новое представление в регион по действию пользователя и удалить существующее представление из того же региона. Я также хочу сохранить кеш нескольких просмотров. Если количество просмотров больше указанного предела, я удалю самый старый вид. Есть ли для него прямая поддержка, или мне нужно реализовать для него адаптер Region. Есть ли другой лучший подход к тому же?
Удаление представления из области в Silverlight PRISM
Ответы (2)
Что ж, позвольте мне ответить на два ваших вопроса.
Во-первых, если вы хотите, чтобы регион отображал только одно представление (например, у вас есть регион, определенный как ContentControl), это возможно. Вы можете добавить множество представлений в эту область, и будет отображаться только активный. Чтобы отобразить другое представление в этой области, которое уже было добавлено, вы должны просто Activate
это представление:
var region = regionManager.Regions["TabRegion"];
region.Add(view1);
region.Add(view2);
region.Activate(view2);
Таким образом, у вас может быть много готовых экземпляров представлений, но только одно видимое.
Во-вторых, с истечением срока. Я бы сказал, что адаптер региона был бы самым чистым и правильным способом, но вы можете просто создать для них истекающий кеш, и когда они истекают, вы можете удалить их из региона, если они не активный:
var region = regionManager.Regions["TabRegion"];
region.Add(view1);
regionTracker.Add(view1, region, TimeSpan.FromMinutes(10));
region.Add(view2);
regionTracker.Add(view2, region, TimeSpan.FromMinutes(10));
region.Activate(view2);
И тогда реализация вашего срока действия для вашего regionTracker может просто:
if(!region.ActiveViews.Contains(ViewThatJustExpired))
{
region.Remove(ViewThatJustExpired);
}
Это немного недоработано, но, надеюсь, это даст вам некоторое представление о том, куда идти.
Взгляните на мою запись в блоге о динамической загрузке модулей в PRISM с навигацией. В этом посте вы увидите, как я использую контейнер с несколькими представлениями, а затем меняю представления в фокусе и вне его. Это предполагает наличие интерфейса для навигации, а затем создание событий, которые меняют состояние представления с помощью диспетчера визуального состояния.
Нажмите здесь, чтобы Посмотреть
Джереми