3

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

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

4

5 回答 5

4

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

于 2009-06-11T09:01:06.150 回答
1

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

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

您现在可以向该区域添加多个视图。Prism 的使用INavigationAwareIActiveAware界面能够在视图上进行导航(激活它们,找到正确的视图等)。

于 2013-02-20T09:20:53.530 回答
0

不知道你是如何布置你的框架的,但如果你使用的是导航相关的框架,你可以简单地调用

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

上述行将负责停用该区域中的其他视图。

否则,如果您确实查看发现或查看注入,您可以使用这里的方法

region.Activate(view);
于 2014-10-07T18:53:38.783 回答
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));

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

于 2010-12-15T18:07:22.333 回答
0

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

于 2011-08-17T21:31:01.767 回答