在复合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 ) );
}
所不同的是谁负责创建视图。 在IRegion.Add
方案(也称为视图注射 )你有责任事先实例化视图。 在与其它方案RegisterViewWithRegion
(也称为查看发现 ),区域管理实例化视图本身。
还有,你会想要做一个或其他的一些技术原因。 例如
- 你必须创建视图的更复杂的方式(也许你要创建的视图和视图模型,并通过设置DataContext属性自己嫁给他们),你需要使用视图注射
- 如果你把地区作用域的优势,你将被迫使用View注射。
相关documenation是:对于视图合成(包括查看注射对比查看发现和查看优先或视图-演示-首先讨论的方法): http://msdn.microsoft.com/en-us/library/dd458944.aspx
还有一个非常方便的“何时使用的”一节。 下面是从文档的摘录:
- 被创建并显示视图时在显式或编程控制,或当需要从一个区域除去的图,例如,作为应用程序逻辑的结果。
- 要显示的同一视图的多个实例成的区域中,其中每个视图实例绑定到不同的数据。
- 要控制添加视图区域的哪个实例(例如,如果你想客户详细信息视图添加到特定客户详细信息的区域)。 请注意,这种情况下需要作用域后本主题中描述的区域。
希望这可以帮助。
RegisterViewWithRegion根据您的DI引发OnContentRegistered事件,但当然是不能的情况下
文章来源: In Composite WPF (Prism), what is the difference between IRegion.Add and IRegionManager.RegisterViewWithRegion?