ПРИЗМА и WPF, как добавить модуль по требованию

У меня есть ряд вкладок в моем окне оболочки, и один основной регион 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>();
    }
}

Что я делаю неправильно здесь? Как я должен продолжить двигаться?

9
задан BalusC 6 August 2010 в 05:59
поделиться

1 ответ

Я не совсем уверен, но попробуйте установить для параметра InitializationMode значение OnDemand при добавлении модуля, например:

var catalog = new ModuleCatalog();
catalog.AddModule(typeof(ModuleA)).AddModule(typeof(ModuleB), InitializationMode.OnDemand);
0
ответ дан 3 November 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: