2011-04-30 80 views
2

我是MEF/Prism和Silverlight的新手,我不确定如何动态地将模块加载到ItemsControl中。我基本上希望能够将动态加载的模块换成同一个区域容器。我如何使用MEF/PRISM来做到这一点?MEF/PRISM Silverlight

+2

模块未加载到“区域”!区域用于显示“视图”,它可以被“拒绝”或“注入”。你能否重新表达你的问题并添加更多细节? :)(顺便说一句,PRISM文档以及QuickStart和参考实现是一个很好的开始方式)) – AbdouMoumen 2011-05-02 10:28:31

回答

2

托管多个控件必须ItemsControl类型的区域:

<ItemsControl 
    x:Name="MainToolbar" 
    cal:RegionManager.RegionName="{x:Static inf:RegionNames.MainToolBarRegion}"> 
</ItemsControl> 

视图可以添加和代码中删除:

//add view if not already present 
IRegion region = this._regionManager.Regions["RegionName"]; 

object view = region.GetView("ViewName"); 
if (view == null) 
{ 
    var view = _container.ResolveSessionRelatedView<IMyView>(); 
    region.Add(view, "ViewName"); 
} 

//remove 
IRegion region = this._regionManager.Regions["RegionName"]; 

object view = region.GetView("ViewName"); 
if (view != null) 
{ 
    region.Remove(view); 
} 

使用此代码,您还可以通过代码添加的意见除了使用棱镜内置的导航功能。

3

Prism中的QuickStart项目可以完全满足您的要求。 这就是所谓的Modularity QuickStart :)

而且,看看这个线程:Using Prism for navigation in Wpf application

查看注射快速入门并设置的ListView选中项的改变的视图,从而可能有一定的帮助了。

+0

本示例将MEF模块加载到不同的控件中。我想将多个模块加载到1个控件中示例我有一个菜单控件,其中有很多项目,当您单击任何菜单项时,它会将该特定模块加载到外壳中的1个共享区域中。那可能吗? – Pawan 2011-04-30 13:17:07

+0

是的,我认为这是可能的。事实上,我打算下周在我的应用中实施它。我认为你可以将所有的子窗口注册到一个容器(命名实例)中,然后在MenuItem.Clicked事件中删除特定区域的所有控件,并插入正确的控件。顺便说一下,我使用复合应用程序指导(Visual Studio 2008 Prism的prev版本) – surfen 2011-04-30 14:48:25