14

Composite WPF (Prism)中,将模块添加到 IRegionManger 集合时,使用 IRegion.Add 和 IRegionManager.RegisterViewWithRegion 有什么区别?

IRegion.Add

public void Initialize()
{
    _regionManager.Regions["MainRegion"].Add( new ModuleAView() );
}

IRegionManager.RegisterViewWithRegion

public void Initialize()
{
    _regionManager.RegisterViewWithRegion( "MainRegion", typeof( ModuleAView ) );
}
4

2 回答 2

15

区别在于谁负责创建视图。在IRegion.Add场景(也称为视图注入)中,您负责事先实例化视图。在另一个场景中RegisterViewWithRegion(也称为View Discovery),区域管理器实例化视图本身。

有一些技术原因你会想要做一个或另一个。例如

  • 您有一种更复杂的创建视图的方法(也许您想创建 View 及其 ViewModel 并通过自己设置 DataContext 属性将它们结合起来),您需要使用 View Injection
  • 如果您利用 Region Scopes,您将被迫使用 View Injection。

相关文档是:对于视图组合(包括视图注入与视图发现以及视图优先或视图呈现者优先方法的讨论):http: //msdn.microsoft.com/en-us/library/dd458944.aspx

还有一个非常方便的“何时使用每个”部分。这是文档的摘录:

  • 显式或编程控制何时创建和显示视图,或者何时需要从区域中删除视图,例如,作为应用程序逻辑的结果。
  • 将相同视图的多个实例显示到一个区域中,其中每个视图实例绑定到不同的数据。
  • 控制添加视图的区域实例(例如,如果要将客户详细信息视图添加到特定客户详细信息区域)。请注意,此方案需要本主题后面描述的范围区域。

希望这可以帮助。

于 2009-09-14T16:53:02.050 回答
1

RegisterViewWithRegion 引发 OnContentRegistered 事件,但当然这取决于您的 DI

于 2009-09-14T15:58:43.873 回答