【问题标题】:MEF/PRISM SilverlightMEF/棱镜银光
【发布时间】:2011-04-30 11:49:45
【问题描述】:

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

【问题讨论】:

  • 模块未加载到“区域”中!区域用于显示“视图”,可以“发现”或“注入”。您能否重新提出您的问题并添加更多详细信息? :)(顺便说一下,PRISM 文档以及快速入门和参考实现是一个很好的开始方式;))

标签: silverlight prism mef


【解决方案1】:

Prism 中的 QuickStart 项目完全符合您的要求。 它被称为Modularity QuickStart :)

另外,看看这个帖子:Using Prism for navigation in Wpf application

View Injection QuickStart 确实设置了更改 ListView 所选项目的视图,因此也可能会有所帮助。

【讨论】:

  • 此示例将 MEF 模块加载到不同的控件中。我想将许多模块加载到 1 个控件中 示例我有一个菜单控件,上面有很多项目,当您单击任何菜单项时,它会将特定模块加载到外壳中的 1 个共享区域中。这可能吗?
  • 是的,我认为这是可能的。事实上,我计划下周在我的应用程序中实现它。我认为您可以在容器(命名实例)中注册所有子窗口,然后在 MenuItem.Clicked 事件上从特定区域中删除所有控件并将正确的控件插入到位。顺便说一句,我使用复合应用程序指南(Prism for Visual Studio 2008 的上一版本)
【解决方案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 );
}

使用此代码,除了使用 Prism 内置导航功能外,您还可以通过代码添加视图。

【讨论】:

    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    相关资源
    最近更新 更多