Ошибка призмы «Менеджер региона не содержит регион» - PullRequest
0 голосов
/ 11 сентября 2018

введите описание изображения здесь

Я разрабатываю приложение Prism Sample с WPF по шаблону MVVM, но в моем приложении возникают некоторые проблемы, когда оно проходит ниже кода:

var view = _container.Resolve<DummyView>();
IRegion region = _regionMansger.Regions["ViewInjectionMain_MainRegion"];

Я опробовал решение, предложенное в других статьях stackoverplow, но оно не работает.

( проект github здесь ).

     class ViewInjectionMainViewModel : BindableBase
        {
            IUnityContainer _container;
            IRegionManager _regionMansger;
            public ViewInjectionMainViewModel(IUnityContainer container, IRegionManager regionManager)
            {
                _container = container;
                _regionMansger = regionManager;

                var view = _container.Resolve<DummyView>();
                IRegion region = _regionMansger.Regions["ViewInjectionMain_MainRegion"];

                region.Add(view);
            }
        }

  class Bootstrapper : UnityBootstrapper
    {
        protected override DependencyObject CreateShell()
        {               
            return this.Container.Resolve<MainWindow>();    
        }    

        protected override void InitializeShell()
        {
            base.InitializeShell();

            var regionManager = this.Container.Resolve<IRegionManager>();    

            if (regionManager != null)
            {
                regionManager.RegisterViewWithRegion("MainRegion", typeof(FirstView));
            }


            Container.RegisterType<object, RegionBasic>("RegionBasic");
            Container.RegisterType<object, RegionControlMain>("RegionControlMain");
            Container.RegisterType<object, DummyView>("DummyView");
            Container.RegisterType<object, ViewInjectionMain>("ViewInjectionMain");

            Application.Current.MainWindow.Show();
        }

        protected override void ConfigureModuleCatalog()
        {
            var catalog = (ModuleCatalog)ModuleCatalog;
            catalog.AddModule(typeof(ModuleA.ModuleAModule));
            catalog.AddModule(typeof(ModuleB.ModuleBModule));
            catalog.AddModule(typeof(DummyModule.DummyModuleClass));        
        }
    }

Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Я проверял следовать советам.Я сделал несколько кнопок и привязал их к «DelegateCommand».Оно работает.но когда я сделал какую-то функцию, то "IRegion region = _regionMansger.Regions [" ViewInjectionMain_MainRegion "];"и это вызывает в конструкторе это не работает.

RegionManager содержит регион после завершения конструктора viewmodel представления.

0 голосов
/ 11 сентября 2018
regionManager.RegisterViewWithRegion("MainRegion", typeof(FirstView));
                regionManager.RegisterViewWithRegion("ViewInjectionMain_MainRegion", typeof(DummyView)); //add this line

и получить регион с помощью Dispatcher (ViewInjectionMain.xaml также должен быть загружен для загрузки ViewInjectionMain_MainRegion)

class ViewInjectionMainViewModel :BindableBase
    {
        IUnityContainer _container;
        IRegionManager _regionMansger;
        public ViewInjectionMainViewModel(IUnityContainer container, IRegionManager regionManager)
        {
            _container = container;


            _regionMansger = regionManager;

            System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
            {
                var view = _container.Resolve<DummyView>();


                IRegion region = _regionMansger.Regions["ViewInjectionMain_MainRegion"];


                region.Add(view);
            }));
        }

    }

Надеюсь, это поможет вам

...