在复合WPF(棱镜),是什么IRegion.Add和IRegionManager.RegisterV

2019-08-06 02:18发布

在复合WPF(棱镜) ,将模块添加到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 ) );
}

Answer 1:

所不同的是谁负责创建视图。 在IRegion.Add方案(也称为视图注射 )你有责任事先实例化视图。 在与其它方案RegisterViewWithRegion (也称为查看发现 ),区域管理实例化视图本身。

还有,你会想要做一个或其他的一些技术原因。 例如

  • 你必须创建视图的更复杂的方式(也许你要创建的视图和视图模型,并通过设置DataContext属性自己嫁给他们),你需要使用视图注射
  • 如果你把地区作用域的优势,你将被迫使用View注射。

相关documenation是:对于视图合成(包括查看注射对比查看发现和查看优先或视图-演示-首先讨论的方法): http://msdn.microsoft.com/en-us/library/dd458944.aspx

还有一个非常方便的“何时使用的”一节。 下面是从文档的摘录:

  • 被创建并显示视图时在显式或编程控制,或当需要从一个区域除去的图,例如,作为应用程序逻辑的结果。
  • 要显示的同一视图的多个实例成的区域中,其中每个视图实例绑定到不同的数据。
  • 要控制添加视图区域的哪个实例(例如,如果你想客户详细信息视图添加到特定客户详细信息的区域)。 请注意,这种情况下需要作用域后本主题中描述的区域。

希望这可以帮助。



Answer 2:

RegisterViewWithRegion根据您的DI引发OnContentRegistered事件,但当然是不能的情况下



文章来源: In Composite WPF (Prism), what is the difference between IRegion.Add and IRegionManager.RegisterViewWithRegion?
标签: Prism cag