use*_*862 5 c# wpf prism mvvm region
我使用一个有2个视图的区域.我有一个ComboBox允许用户选择区域中的视图.
我有两个问题:
第一个问题是:有什么区别:
_regionManager.Regions.Add("MyRegion")
_regionManager.Regions["MyRegion"].Add(container.Resolve<OneView>())
_regionManager.Regions["MyRegion"].Add(container.Resolve<SecondView>())
Run Code Online (Sandbox Code Playgroud)
至:
_regionManager.RegisterViewWithRegion("MyRegion", () => container.Resolve<OneView>());
_regionManager.RegisterViewWithRegion("MyRegion", () => container.Resolve<SecondView>());
Run Code Online (Sandbox Code Playgroud)
我的第二个问题是:有什么区别:
_regionManager.Regions["MyRegion"].ActiveViews.ForEach(view => _region.Deactivate(view));
_regionManager.Regions["MyRegion"].Activate(container.Resolve<SecondView>());
Run Code Online (Sandbox Code Playgroud)
至:
_regionManager.Regions["MyRegion"].RequestNavigate(new Uri("SecondView", UriKind.Relative));
Run Code Online (Sandbox Code Playgroud)
提前致谢.
您提到的第一个比较的差异在于RegisterViewWithRegion()方法在进程结束时激活已注册的View,而第一个实现仅添加Views.这种RegisterViewWithRegion()方法称为View Discovery.您可能会在昨天发表的以下帖子中找到相关答案:
有关MSDN Prism指南的有用信息:
对于第二次比较,它将取决于Region类型.第一个实现只会激活SecondView.但是,如果Region是ItemsControl类型,则RequestNavigate()可能不会停用上一个View.一个ItemsControl的地区,您可以添加很多意见,所以你可以有不止一个活动视图.
如果是这样的情况下,SecondView会出现下面的以前的活动视图的地区.但如果您不想要这种行为,您有两个选择:
有关MSDN Prism Guide上的RequestNavigate()和导航的有用信息:
我希望这会有所帮助,问候.