注册区域到在棱镜中添加区域有什么区别?
我想创建一个具有动态视图的区域(一个区域中有多个视图)。 需要通过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使用当前的ServiceLocator
从Container
获取实例(MEF,Unity,无论你选择什么)。 然后它会自动添加视图。
发现更精简,因为所有视图都是懒洋洋地创建的(当需要它们时)。 注入可以让你做一些高级组合(如范围区域),但你必须更多动手。
没有正确的答案,但对于学习棱镜,我会选择视图发现( RegisterViewWithRegion
)。 为获得最佳效果,请使用常量来保存您的区域名称!
您是否使用容器来注入实例? 根据我的理解,如果使用在相关View类型上配置了Singleton注册的容器,则两个过程都将返回现有View 。 您可以在以下MSDN Prism指南章节中找到更多信息:
- 管理组件之间的依赖关系:注册
关于这两个实现, RegisterViewWithRegion()方法与第一个实现非常相似:它基本上从容器加载并将View添加到Region中 ,并激活它。 因此,在每次初始化完成后,使用此方法在Region中注册的最后一个View将是活动的。 您可以在PrismLibrary解决方案上检查此行为。
像Jimmy所说,您描述的代码仅用于使用相应的视图加载每个Region 。 然后,您将使用RequestNavigate()方法来激活已在Region上注册的选定View 。
您可以在以下MSDN Prism指南章节中找到更多相关信息:
- 导航
我希望这有帮助,问候。
我第一次见到
键入(MyView的)
也许
typeof运算(MyView的)
??