Tengo un conjunto de pestañas en la ventana de mi shell y una región principal que es un control de contenido. También tengo cuatro módulos que deseo cargar bajo demanda cuando se selecciona una determinada pestaña. Entonces, cuando se selecciona tab1, quiero cargar el módulo A, cuando se selecciona tab2, quiero cargar el ModuleB, etc. El primer módulo se carga cuando se inicia la aplicación. El problema es que cuando cambio la pestaña no pasa nada. No hay errores difíciles. Estoy usando esta versión del prisma Compuesto Guía de aplicación para WPF y Silverlight - octubre de 2009.PRISM y WPF cómo agregar un módulo bajo demanda
Probé este enfoque:
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");
}
}
programa previo:
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;
}
}
Y el módulo B que quiero cargar a pedido (solía usar esta línea comentada por eso lo dejé aquí):
[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>();
}
}
¿Qué estoy haciendo mal aquí? ¿Cómo debo proceder?
tengo más o menos el mismo escenario. +1 por una pregunta mía – autonomatt