【问题标题】:Removing View from Region in Silverlight PRISM在 Silverlight PRISM 中从区域中删除视图
【发布时间】:2009-09-14 14:07:19
【问题描述】:

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

【问题讨论】:

    标签: silverlight prism


    【解决方案1】:

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

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

    这有点半生不熟,但希望这能让你知道该去哪里。

    【讨论】:

      【解决方案2】:

      请查看我关于在 PRISM 中使用导航进行动态模块加载的博文。在那篇文章中,您将看到我如何使用多视图容器,然后将视图交换为焦点和焦点。它包括一个导航界面,然后引发使用可视状态管理器交换视图状态的事件。

      Click Here to View

      杰里米

      【讨论】:

        猜你喜欢
        • 2011-01-13
        • 1970-01-01
        • 2011-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多