在Silverlight PRISM中删除区域中的视图

时间:2009-09-14 14:07:20

标签: silverlight prism

我有一个区域,一次只能有一个活动视图。我想在用户操作上向区域添加新视图,并从同一区域中删除现有视图。我还想维护几个视图的缓存。如果视图的数量超过指定的限制,那么我将删除最旧的视图。是否有任何直接支持,或者我必须为它实现Region适配器。还有其他更好的方法吗?

2 个答案:

答案 0 :(得分:2)

好吧,让我回答你的两个问题。

首先,如果您希望Region只显示一个视图(比如说您将某个区域定义为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);
}

这有点半生不熟,但希望这会让你知道去哪儿。

答案 1 :(得分:0)

查看我的博客文章,了解PRISM with Navigation中的动态模块加载。在该帖子中,您将看到我如何使用多视图容器,然后将视图交换到焦点之外。它涉及具有导航界面,然后使用可视状态管理器引发交换视图状态的事件。

Click Here to View

杰里米