我有一个名为“ActiveModule”的区域,并希望在不同的视图中重复使用它,例如按下搜索按钮并在那里显示搜索视图等。在同一区域的视图之间切换棱镜
我可以使用ATM的唯一方法是停用该区域中的所有活动视图,然后激活我喜欢的视图,这有点脏,是否有“视图管理器”或类似的东西我可以使用?
我有一个名为“ActiveModule”的区域,并希望在不同的视图中重复使用它,例如按下搜索按钮并在那里显示搜索视图等。在同一区域的视图之间切换棱镜
我可以使用ATM的唯一方法是停用该区域中的所有活动视图,然后激活我喜欢的视图,这有点脏,是否有“视图管理器”或类似的东西我可以使用?
如果您的区域是ContentControl或派生自ContentControl,那么一次只能有一个活动视图,并且您只需要激活该区域上的搜索视图。
如果您使用的是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));
它并不理想,但它的工作原理。 :)
据我所知,你在做什么是唯一的方法,理论上在SCSF最顶层的观点被框架激活。你可以创建你自己的ViewManager或一个ShowViewService等价物来完成它。事实上,这就是我所做的!
您是否考虑过使用能够显示多个视图的contentControl类型? 例如,你可以使用一个TabControl这样的:
<TabControl Name="MainRegion" Regions:RegionManager.RegionName="MainRegion"/>
现在可以多个视图的区域增加。使用Prism的INavigationAware
和IActiveAware
接口可以对视图进行导航(激活它们,找到正确的视图等)。
不知道你是如何布局的框架,但如果你正在使用的导航相关的框架,你可以简单地调用
regionManager.RequestNavigate(RegionNames.MainContentRegion, new Uri("your target view" + parameters, UriKind.Relative));
上述线路将采取停用该地区的其他意见的照顾。
否则,如果你这样做图发现或视图注射可以使用的方法here