c# – 区域激活和区域RequestNavigate有什么区别?

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

提前致谢.

解决方法:

您提到的第一个比较的差异在于RegisterViewWithRegion()方法在进程结束时激活已注册的View,而第一个实现仅添加Views.
这种RegisterViewWithRegion()方法称为View Discovery.您可能会在昨天发表的以下帖子中找到相关答案:

> What is the difference between register a region to adding a region in prism?

有关MSDN Prism指南的有用信息:

> Composing the User Interface

对于第二次比较,它将取决于Region类型.第一个实现只会激活SecondView.但是,如果Region是ItemsControl类型,则RequestNavigate()可能不会停用上一个View. ItemsControl Region允许您附加许多视图,因此您可以拥有多个活动视图.

如果是这种情况,则SecondView将显示在区域中先前活动的视图下方.但如果您不想要这种行为,您有两个选择:

>将Region类型设置为ContentControl,因此一次只能显示一个View;
>取消激活OnNavigatedFrom()方法中的上一个视图.您需要使之前的View继承自INavigationAware.

有关MSDN Prism Guide上的RequestNavigate()和导航的有用信息:

> View-Based Navigation

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

上一篇:十四、MVC的WEB框架(Structs2)


下一篇:c# – 导致xamDataGrid重绘