У меня есть ряд вкладок в моем окне оболочки, и один основной регион whicxh является contentcontrol. У меня также есть четыре модуля, которые я хочу загрузить по требованию, когда определенная вкладка выбрана. Таким образом, когда tab1 выбран, я хочу загрузить moduleA, когда tab2 выбран, я хочу загрузить ModuleB и т.д. Первый модуль загружается на том, когда приложение запускается. Проблема состоит в том, что, когда я изменяю вкладку, ничего не происходит. Нет никаких жестких ошибок. Я использую эту версию Руководства Составного приложения призмы WPF и Silverlight - октябрь 2009.
Я попробовал этот подход:
Shell:
public partial class Shell : RibbonWindow, IShellView
{
private readonly IRegionManager regionManager;
private readonly IModuleManager moduleManager;
public Shell(IModuleManager moduleManager)
{
this.moduleManager = moduleManager;
InitializeComponent();
}
public void ShowView()
{
this.Show();
}
private void onTabSelection(object sender, RoutedEventArgs e)
{
this.moduleManager.LoadModule("ModuleB");
}
}
Bootstrapper:
public partial class MyBootstrapper : UnityBootstrapper
{
protected override IModuleCatalog GetModuleCatalog()
{
var catalog = new ModuleCatalog();
catalog.AddModule(typeof(ModuleA)).AddModule(typeof(ModuleB));
return catalog;
}
protected override void ConfigureContainer()
{
Container.RegisterType<IShellView, Shell>();
base.ConfigureContainer();
}
protected override DependencyObject CreateShell()
{
ShellPresenter presenter = Container.Resolve<ShellPresenter>();
IShellView view = presenter.View;
view.ShowView();
return view as DependencyObject;
}
}
И moduleB, который я хочу смочь загрузить по требованию (я раньше использовал эту прокомментированную строку вот почему, я оставил ее здесь):
[Module(ModuleName = "ModuleB", OnDemand = true)]
public class ModuleB : IModule
{
private readonly IUnityContainer _container;
private readonly IRegionManager _regionManager;
public ModuleB(IUnityContainer container, IRegionManager regionManager)
{
_container = container;
_regionManager = regionManager;
}
public void Initialize() {
_regionManager.Regions["MainRegion"].Add(new ModuleBView());
this.RegisterViewsAndServices();
// this._regionManager.RegisterViewWithRegion(RegionNames.MainRegion, () => _container.Resolve<MissionProfileView>());
}
protected void RegisterViewsAndServices()
{
_container.RegisterType<Modules.ModuleBView>();
}
}
Что я делаю неправильно здесь? Как я должен продолжить двигаться?
Я не совсем уверен, но попробуйте установить для параметра InitializationMode значение OnDemand при добавлении модуля, например:
var catalog = new ModuleCatalog();
catalog.AddModule(typeof(ModuleA)).AddModule(typeof(ModuleB), InitializationMode.OnDemand);