答案 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已经用所有模块实例化的地方。