【发布时间】:2010-12-13 16:11:13
【问题描述】:
我在一个项目中工作,我在 Shell 中声明了两个部分;其中之一用于放置菜单,其项目将按需加载模块,另一个将用于加载所请求模块的视图。
这是一个外壳设计的例子
<StackPanel Orientation="Vertical" Grid.Column="0" Grid.Row="1">
<Button Content="Home" Height="23" Name="Home" Width="75"/>
<Button Content="Users" Height="23" Name="Users" Width="75"/>
</StackPanel>
<Border Grid.Column="1" Grid.Row="1" Background="WhiteSmoke">
<ContentControl cal:RegionManager.RegionName="MainRegion" Name="MainRegion"/>
</Border>
如您所见,“菜单”由按钮系列(这仅用于测试)和一个 ContentControl 组成,就像我需要加载视图的区域一样。
这是一个如何在我的引导程序中添加模块的示例:
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
System.Type homeModule = typeof(FieldCollection.Home.HomeModule);
ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(new ModuleInfo() { ModuleName = homeModule.Name, ModuleType = homeModule.AssemblyQualifiedName, InitializationMode = InitializationMode.OnDemand });
System.Type userModule = typeof(FieldCollection.User.UserModule);
moduleCatalog.AddModule(new ModuleInfo() { ModuleName = userModule.Name, ModuleType = userModule.AssemblyQualifiedName, InitializationMode = InitializationMode.OnDemand });
}
这是模块的初始化方法:
public void Initialize()
{
this.container.RegisterType<IUserController, UserController>(new ContainerControlledLifetimeManager());
this.regionManager.RegisterViewWithRegion("MainRegion", typeof(Views.UserSummaryView));
}
最后这就是从菜单中调用模块的方式。
private void User_Click(object sender, RoutedEventArgs e)
{
moduleManager.LoadModule("UserModule");
}
问题是区域中只显示第一个调用的视图。我正在使用 Prism 4 和 Unity,例如依赖注入容器
感谢您的帮助
【问题讨论】: