Удаление представления из области в Silverlight PRISM

У меня есть регион, в котором одновременно может быть только одно активное представление. Я хочу добавить новое представление в регион по действию пользователя и удалить существующее представление из того же региона. Я также хочу сохранить кеш нескольких просмотров. Если количество просмотров больше указанного предела, я удалю самый старый вид. Есть ли для него прямая поддержка, или мне нужно реализовать для него адаптер Region. Есть ли другой лучший подход к тому же?


person Community    schedule 14.09.2009    source источник


Ответы (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);
}

Это немного недоработано, но, надеюсь, это даст вам некоторое представление о том, куда идти.

person Anderson Imes    schedule 14.09.2009

Взгляните на мою запись в блоге о динамической загрузке модулей в PRISM с навигацией. В этом посте вы увидите, как я использую контейнер с несколькими представлениями, а затем меняю представления в фокусе и вне его. Это предполагает наличие интерфейса для навигации, а затем создание событий, которые меняют состояние представления с помощью диспетчера визуального состояния.

Нажмите здесь, чтобы Посмотреть

Джереми

person Jeremy Likness    schedule 23.12.2009