【问题标题】:Prism error 'The region manager does not contain the region'棱镜错误“区域管理器不包含该区域”
【发布时间】:2019-02-15 15:40:23
【问题描述】:

enter image description here

我正在按照 MVVM 模式使用 WPF 开发一个 Prism 示例应用程序,但是当它通过以下代码时,它在我的应用程序中出现了一些问题:

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

我已经尝试过其他 stackoverplow 帖子中提出的解决方案,但它不起作用。

(project github here)。

     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));        
        }
    }

谢谢。

【问题讨论】:

  • 您的解决方案中的哪个文件包含代码?
  • @Nikolaus ViewModels → ViewINjectionMainViewModel.cs or build → Menubar → "Views/Region" → "0. VIew injection" 谢谢

标签: c# .net wpf mvvm prism


【解决方案1】:
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);
            }));
        }

    }

希望对你有帮助

【讨论】:

  • 有效!好吧,为什么需要 Dispatcher 来“加载 ViewInjectionMain.xaml 以加载 ViewInjectionMain_MainRegion”你能告诉我更多细节吗?谢谢。
  • 我不确定,但我认为你的 ViewInjectionMain.xaml 直到你调用 _regionManager.RequestNavigate("MainRegion", viewName);所以这个区域(“ViewInjectionMain_MainRegion”)不能加载到区域中。当您加载 ViewInjectionMain.xaml 时,您的 GUI 尚未加载,因为当您的函数调用结束时可以加载 GUI,因此您需要 Dispatcher 以确保 ViewInjectionMain.xaml 已在 GUI 中加载。
【解决方案2】:

我测试了遵循建议。我做了一些按钮并将其绑定到“DelegateCommand”。有用。但是当我做了一些函数“IRegion region = _regionMansger.Regions[”ViewInjectionMain_MainRegion“];”它在构造函数中调用它不起作用。

RegionManager 包含视图的视图模型构造函数结束后的区域。

【讨论】:

  • 那么你是如何解决这个问题的,以便在构造函数之后调用函数?当然可以有一个按钮,但我需要它在可用时直接运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多