时间:2011-01-06 18:23:46

标签: .net wpf module prism mef

2 个答案:

答案 0 :(得分:2)

这是一个简单的答案,由于某种原因,我很难找到。 IRegionManager提供了一个RegisterViewWithRegion方法,该方法接受一个返回视图的函数。这允许区域管理器在准备就绪时实例化视图(而不是使用AddToRegion,这会立即发生)。所以关键是在模块的Initialize例程中使用该方法:

public void Initialize()
{
    _regionManager.RegisterViewWithRegion("ContentRegion", () => new ModuleBView());
}

当我想到这一点时,我也想出了一个解决方法。当模块设置为InitializationMode.OnDemand时,命令行管理程序可以导入IModuleManager并在LoadModule事件中使用ContentRendered。这可确保将区域添加到区域管理器,并且模块可以毫无问题地添加其视图。如果需要遍历可用模块,请使用此事件处理程序:

public Shell()
{
    InitializeComponent();

    ContentRendered += (o, eventArgs) =>
        {
            foreach (var moduleInfo in _moduleCatalog.Modules)
            {
                _moduleManager.LoadModule(moduleInfo.ModuleName);
            }
        };
}

答案 1 :(得分:0)

我倾向于在引导程序中使用视图和区域 AggregateCatalog.Changed _handler - 这是你知道你的模块已经加载并且Shell已经用所有模块实例化的地方。