Ho una serie di schede nella finestra della mia shell e una regione principale che è un contentcontrol. Ho anche quattro moduli che voglio caricare su richiesta quando viene selezionata una determinata scheda. Quindi, quando viene selezionato tab1, voglio caricare moduleA, quando viene selezionato tab2, voglio caricare ModuleB, ecc. Il primo modulo si carica all'avvio dell'applicazione. Il problema è che quando cambio la scheda non succede nulla. Non ci sono errori difficili. Sto utilizzando questa versione del prisma Composite Application Guidance per WPF e Silverlight - ottobre 2009.PRISM e WPF come aggiungere un modulo su richiesta
Ho provato questo approccio:
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;
}
}
E moduloB che voglio essere in grado di caricare su richiesta (ho usato questa linea commentata per questo l'ho lasciato qui):
[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>();
}
}
Cosa sto facendo di sbagliato qui? Come dovrei procedere?
ho più o meno lo stesso scenario. +1 per la domanda da parte mia – autonomatt