C# 在prism中注册一个区域和添加一个区域有什么区别?

C# 在prism中注册一个区域和添加一个区域有什么区别?,c#,wpf,mvvm,prism,regions,C#,Wpf,Mvvm,Prism,Regions,我想创建一个具有动态视图的区域(一个区域中有多个视图)。区域内容需要通过组合框选择事件进行更改(组合框项目是视图实例)。我希望组合框中的更改将通过所选视图项更改区域中的视图 我的问题是: MyView view= new MyView(); IRegion region = new Region(); region.Name="MyRegion"; regionManager.Regions.Add(region); region.Add(view); region.Activate(v

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

我的问题是:

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

?


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

如果希望在同一区域中显示不同的视图,则需要使用或视图注入,这是您在第一种方法中使用的

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


有关更多信息,请参见条目

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

为什么是发现?Prism使用当前的
ServiceLocator
容器
中抓取实例(MEF、Unity,任意选择)。然后自动添加视图

发现更精简,因为所有视图都是惰性创建的(在需要时)。注入允许您进行一些高级合成(如范围区域),但您必须更加亲自动手


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

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

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

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

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

我希望这能有所帮助,亲爱的。

我第一次看到

类型(MyView)

也许吧

类型(MyView)


有人吗?我真的需要解决它。我需要使用现有视图,而不是再次创建它们。这就是我需要使用第一个过程的原因…重用视图时要非常小心。单个视图实例只能在可视树中存在一次。你在使用MEF吗?我建议你只有在确定答案后才回答。一个快速的谷歌应该可以帮助你发现哪些是正确的。此外,解释你的建议,以及他们可能如何在他们的上下文中使用它。
regionManager.RegisterViewWithRegion("MyRegion",type(MyView));