【发布时间】:2009-09-14 14:07:19
【问题描述】:
我有一个区域,它一次只能有一个活动视图。我想在用户操作时向该区域添加新视图,并从同一区域中删除现有视图。我还想维护几个视图的缓存。如果视图数量超过指定的限制,那么我将删除最旧的视图。是否有任何直接支持,或者我必须为它实现区域适配器。还有其他更好的方法吗?
【问题讨论】:
标签: silverlight prism
我有一个区域,它一次只能有一个活动视图。我想在用户操作时向该区域添加新视图,并从同一区域中删除现有视图。我还想维护几个视图的缓存。如果视图数量超过指定的限制,那么我将删除最旧的视图。是否有任何直接支持,或者我必须为它实现区域适配器。还有其他更好的方法吗?
【问题讨论】:
标签: silverlight prism
好吧,让我回答你的两个问题。
首先,如果您希望区域仅显示一个视图(例如,您将区域定义为 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 中使用导航进行动态模块加载的博文。在那篇文章中,您将看到我如何使用多视图容器,然后将视图交换为焦点和焦点。它包括一个导航界面,然后引发使用可视状态管理器交换视图状态的事件。
杰里米
【讨论】: