棱镜错误 'The region manager does not contain the region'
Prism error 'The region manager does not contain the region'
enter image description here
我正在按照 MVVM 模式使用 WPF 开发一个 Prism 示例应用程序,但是当它通过以下代码时它在我的应用程序中出现了一些问题:
var view = _container.Resolve<DummyView>();
IRegion region = _regionMansger.Regions["ViewInjectionMain_MainRegion"];
我尝试了其他 stackoverplow 帖子中提出的解决方案,但它不起作用。
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));
}
}
谢谢。
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);
}));
}
}
希望对您有所帮助
我按照建议进行了测试。我制作了一些按钮并将其绑定到 "DelegateCommand"。有用。但是当我做了一些函数 "IRegion region = _regionMansger.Regions["ViewInjectionMain_MainRegion"];"它在构造函数中调用它不起作用。
RegionManager 在视图的视图模型构造函数结束后包含区域。
enter image description here
我正在按照 MVVM 模式使用 WPF 开发一个 Prism 示例应用程序,但是当它通过以下代码时它在我的应用程序中出现了一些问题:
var view = _container.Resolve<DummyView>();
IRegion region = _regionMansger.Regions["ViewInjectionMain_MainRegion"];
我尝试了其他 stackoverplow 帖子中提出的解决方案,但它不起作用。
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));
}
}
谢谢。
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);
}));
}
}
希望对您有所帮助
我按照建议进行了测试。我制作了一些按钮并将其绑定到 "DelegateCommand"。有用。但是当我做了一些函数 "IRegion region = _regionMansger.Regions["ViewInjectionMain_MainRegion"];"它在构造函数中调用它不起作用。
RegionManager 在视图的视图模型构造函数结束后包含区域。