注册区域到在棱镜中添加区域有什么区别?

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

我的问题是什么区别:

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或view injection

RegisterViewWithRegion将Region与视图相关联,这样每次托管区域的控件成为可视树的一部分时,视图将自动解析并显示。

有关更多信息,请参阅msdn条目

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

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

发现更精简,因为所有视图都是懒洋洋地创建的(当需要它们时)。 注入可以让你做一些高级组合(如范围区域),但你必须更多动手。

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

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

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

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

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

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

  • 导航

我希望这有帮助,问候。

我第一次见到

键入(MyView的)

也许

typeof运算(MyView的)

??