区域激活和区域RequestNavigate有什么区别?

时间:2014-02-18 10:08:48

标签: c# wpf mvvm prism region

我使用一个有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));

提前致谢。

1 个答案:

答案 0 :(得分:7)

您提到的第一次比较的差异在于 RegisterViewWithRegion() 方法会在流程结束时激活已注册的查看第一个实现只添加视图。 此 RegisterViewWithRegion() 方法称为 查看发现 。您可能会在昨天发表的以下帖子中找到相关答案:

有关 MSDN棱镜指南的有用信息:

对于第二次比较,它取决于 Region 类型。第一个实现只会激活 SecondView 。但是,如果区域 ,则 RequestNavigate() 可能无法停用之前的查看 ItemsControl 类型。通过 ItemsControl 区域,您可以添加多个视图,这样您就可以拥有多个有效的查看

如果是这种情况, SecondView 将显示在区域中之前有效的查看下方。但如果你不想要这种行为,你有两个选择:

  1. 区域类型设为 ContentControl ,因此一次只能显示一个视图;
  2. 停用 OnNavigatedFrom() 方法中的上一个查看。您需要使之前的查看继承自 INAVigationAware
  3. MSDN棱镜指南上有关 RequestNavigate()导航的有用信息:

    我希望这会有所帮助,问候。