什么是区域激活和区域RequestNavigate之间的区别?

6

我使用一个区域和两个视图。我有一个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));

Thanks in advance.

1个回答

9
你提到的第一个比较中,RegisterViewWithRegion() 方法会在过程结束时激活已注册的 View ,而第一种实现仅添加 Views 。这种 RegisterViewWithRegion() 方法被称为 View Discovery 。你可以在你昨天发布的以下帖子中找到相关答案:

MSDN Prism Guide 提供有关内容组合的有用信息:

对于第二个比较,它将取决于 Region 类型。第一种实现只会保留 SecondView 处于激活状态。但是,如果 RequestNavigate() Region 上的类型是 ItemsControl 类型,则可能不会取消激活之前的 View ItemsControl Region 允许您添加许多 View ,因此您可以拥有多个活动的 View

如果是这种情况,则在 Region 中前一个处于激活状态的 View 下方会出现 SecondView 。但是,如果你不想要这种行为,你有两个选择:

  1. Region 类型设置为 ContentControl ,以便一次只显示一个View;
  2. OnNavigatedFrom() 方法中取消激活之前的 View 。 你需要让之前的 View 继承自 INavigationAware

MSDN Prism Guide 提供有关 RequestNavigate() 导航 的有用信息:

希望这对你有所帮助,祝好!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接