我使用一个有2个视图的区域。我有一个ComboBox
,允许用户选择区域中的视图。
我有两个问题:
第一个问题是:
之间的区别_regionManager.Regions.Add("MyRegion")
_regionManager.Regions["MyRegion"].Add(container.Resolve<OneView>())
_regionManager.Regions["MyRegion"].Add(container.Resolve<SecondView>())
要:
_regionManager.RegisterViewWithRegion("MyRegion", () => container.Resolve<OneView>());
_regionManager.RegisterViewWithRegion("MyRegion", () => container.Resolve<SecondView>());
我的第二个问题是:
之间的区别_regionManager.Regions["MyRegion"].ActiveViews.ForEach(view => _region.Deactivate(view));
_regionManager.Regions["MyRegion"].Activate(container.Resolve<SecondView>());
要:
_regionManager.Regions["MyRegion"].RequestNavigate(new Uri("SecondView", UriKind.Relative));
提前致谢。
答案 0 :(得分:7)
您提到的第一次比较的差异在于 RegisterViewWithRegion() 方法会在流程结束时激活已注册的查看第一个实现只添加视图。 此 RegisterViewWithRegion() 方法称为 查看发现 。您可能会在昨天发表的以下帖子中找到相关答案:
有关 MSDN棱镜指南的有用信息:
对于第二次比较,它取决于 Region 类型。第一个实现只会激活 SecondView 。但是,如果区域是 ,则 RequestNavigate() 可能无法停用之前的查看 ItemsControl 类型。通过 ItemsControl 区域,您可以添加多个视图,这样您就可以拥有多个有效的查看。
如果是这种情况, SecondView 将显示在区域中之前有效的查看下方。但如果你不想要这种行为,你有两个选择:
MSDN棱镜指南上有关 RequestNavigate()和导航的有用信息:
我希望这会有所帮助,问候。