我有两个模块:ModuleLogging和ModuleItems。我Shell有声明:
<Grid>
<DockPanel LastChildFill="True">
<ContentControl DockPanel.Dock="Top" prism:RegionManager.RegionName="{x:Static inf:RegionNames.TheUpperRegion}" Margin="5" />
<ContentControl prism:RegionManager.RegionName="{x:Static inf:RegionNames.TheBottomRegion}" Margin="5"/>
</DockPanel>
<ContentControl prism:RegionManager.RegionName="{x:Static inf:RegionNames.TheWholeRegion}" Margin="5" />
</Grid>
首先加载ModuleLogging
,然后如果用户已经通过身份验证,我想加载ModuleItems
。
根据我的理解,我应该实例化:
我的引导程序类:
protected override IModuleCatalog CreateModuleCatalog()
{
ModuleCatalog catalog = new ModuleCatalog();
catalog.AddModule(typeof(ModuleLogging));
//I've not added ModuleItems as I want to check whether the user is authorized
return catalog;
}
我尝试从ModuleLogging
调用ModuleItems
:
Uri viewNav = new Uri("ModuleItems", UriKind.Relative);
regionManager.RequestNavigate(RegionNames.TheUpperRegion, viewNav);
regionManager.RequestNavigate(RegionNames.TheBottomRegion, viewNav);
但我的ModuleLogging的LoggingView没有被ModuleItems的ToolBarView和DockingView所替代。相反,在ContentControls中,我只看到了System.Object和System.Object,而不是LoggingView所应有的控件,因为LoggingView是透明的。
是的,我知道内存中没有名为ModuleItems的对象。
如何按需加载模块并导航到视图?
ModuleItems.Initialise
方法的结尾处直接调用RequestNavigate。 或者第三种,也许是最干净的选择,是在模块加载时通过EventAggregator触发事件,并由ModuleItems中的某个视图控制器单例对象订阅该事件。(请注意,IModule是一个临时对象,使用弱事件无法在那里订阅) - pangabiMC