在棱镜中注册一个区域和添加一个区域有什么区别



我想创建一个具有动态视图的区域(一个区域中有多个视图)。区域内容需要通过组合框选择事件进行更改(组合框项目为视图实例)。我希望组合框中的更改将通过所选视图项更改区域中的视图。

我的问题是之间有什么区别

MyView view= new MyView();
IRegion region = new Region();  
region.Name="MyRegion";  
regionManager.Regions.Add(region);
region.Add(view);
region.Activate(view);

收件人:

regionManager.RegisterViewWithRegion("MyRegion",type(MyView));

使用动态区域的最佳方式是什么?

如果你想在同一个区域显示不同的视图,你需要使用RequestNavigate或视图注入,这是你在第一个方法中使用的

RegisterViewWithRegion将Region与视图相关联,以便每当承载区域的控件成为视觉树的一部分时,视图都会自动解析和显示。

有关的详细信息,请参阅msdn条目

直接添加控件实例称为视图注入。注册视图类型称为视图发现

为什么要发现?Prism使用当前的ServiceLocatorContainer获取实例(MEF、Unity,无论您选择什么)。然后它自动添加视图。

Discovery更精简,因为您的所有视图都是懒洋洋地创建的(当需要时)。注入可以让你做一些高级的合成(比如作用域),但你必须更加亲力亲为。

没有正确的答案,但对于学习棱镜,我会选择视图发现(RegisterViewWithRegion)。为了获得最佳结果,请使用常量来保存您的区域名称!

您不是在使用容器来注入实例吗?根据我的理解,如果使用在相关的View类型上配置了Singleton注册的容器,这两个过程都将返回现有的视图。您可以在MSDN Prism Guide章节中找到更多信息:

  • 管理组件之间的依赖关系:注册

关于这两个实现,RegisterViewWithRegion()方法与第一个实现非常相似:它基本上从容器将View加载并添加到Region中,然后激活它。因此,使用此方法在Region中注册的最后一个View将是每次初始化完成后的活动视图。您可以在PrismLibrary解决方案上检查此行为。

正如Jimmy所说,您描述的代码将仅用于加载每个Region和相应的Views。然后,您将使用RequestNavigate()方法来激活已在区域上注册的所选视图

您可以在MSDN Prism Guide章节中找到更多相关信息:

  • 导航

我希望这有帮助,尊敬的。

我第一次看到

类型(MyView)

也许

类型的(MyView)

??

相关内容

  • 没有找到相关文章

最新更新