棱镜在同一地区的视图之间切换

时间:2009-06-04 00:49:25

标签: prism

我有一个名为“ActiveModule”的区域,想要在不同的视图中重复使用它,例如你按下搜索按钮,我会在那里显示搜索视图等等。

我可以做ATM的唯一方法是停用该区域中的所有活动视图,然后激活我喜欢的视图,这有点脏,是否有“viewManager”或类似的东西我可以使用?

5 个答案:

答案 0 :(得分:4)

如果您的区域是ContentControl或派生自ContentControl,则一次只能有一个活动视图,您只需激活该区域的搜索视图。

答案 1 :(得分:1)

您是否考虑过使用一种能够显示多个视图的contentControl? 例如,您可以像这样使用TabControl:

<TabControl Name="MainRegion" Regions:RegionManager.RegionName="MainRegion"/>

您现在可以向该地区添加多个视图。使用Prism的INavigationAwareIActiveAware接口可以对视图进行导航(激活它们,找到正确的视图等)。

答案 2 :(得分:0)

如果您使用的是IRegionManager,则可以删除您识别其类型的所有视图,然后添加自己的视图。

    foreach (var view in _regionsManager.Regions["MyRegion"].Views.ToArray())
    {
        if (view is MyType ||
            view is MyOtherType)
            _regionsManager.Regions["MyRegion"].Remove(view);
    }

    _regionsManager.AddToRegion("MyRegion", typeof(MyView));

它绝不是理想的,但它有效。 :)

答案 3 :(得分:0)

据我所知,你所做的是唯一的方法,理论上在SCSF中,框架激活了最顶层的视图。您可以创建自己的ViewManager或ShowViewService等效项来完成此操作。事实上,这就是我所做的!

答案 4 :(得分:0)

不确定您是如何布置框架的,但如果您使用导航相关框架,则可以直接调用

regionManager.RequestNavigate(RegionNames.MainContentRegion, new Uri("your target view" + parameters, UriKind.Relative));

以上一行将负责停用该地区的其他观点。

否则,如果您查看发现或查看注入,则可以使用方法here

region.Activate(view);