Wpf Prism错误:区域管理器不包含区域

Wpf Prism错误:区域管理器不包含区域,wpf,prism,Wpf,Prism,我正在使用prism 4框架开发一个WPF桌面应用程序。在我的应用程序中,我显示一个员工列表,当从列表中选择一个时,所选员工的详细信息将显示在详细信息区域中。在响应员工所选事件的控制器中,我有以下用于注入EmployeeDetailsView的代码 IRegion employeeDetailsVeiwRegion = this.regionManager.Regions["EmployeeDetailsVeiwRegion"]; EmployeeDetailsView view

我正在使用prism 4框架开发一个WPF桌面应用程序。在我的应用程序中,我显示一个员工列表,当从列表中选择一个时,所选员工的详细信息将显示在详细信息区域中。在响应员工所选事件的控制器中,我有以下用于注入EmployeeDetailsView的代码

    IRegion employeeDetailsVeiwRegion = this.regionManager.Regions["EmployeeDetailsVeiwRegion"];
    EmployeeDetailsView view = employeeDetailsVeiwRegion.GetView("EmployeeDetailsVeiw") as EmployeeDetailsView;
    if(view == null)
    {
        view = this.container.Resolve<EmployeeDetailsView>();
        employeeDetailsVeiwRegion.Add(view, "EmployeeDetailsVeiw");
    }
尝试解决方案 我已经尝试了其他stack over plow帖子(如此处和其他帖子)中提出的解决方案,但它对我不起作用。

试试:

this.regionManager.RegisterViewWithRegion("EmployeeDetailsVeiwRegion",
    typeof(EmployeeDetailsView));

终于成功了。我在ContentControl上设置了区域管理器,该控件包含我的presenter类(在我的例子中是EmployeePage)contractor中的区域

IRegionManager regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
regionManager.Regions.Remove("EmployeeDetailsViewRegion");
RegionManager.SetRegionManager(this.EmployeeDetailsContentControl, regionManager);
IRegionManager regionManager=ServiceLocator.Current.GetInstance();
regionManager.Regions.Remove(“EmployeeDetailsViewRegion”);
RegionManager.SetRegionManager(this.EmployeeDetailsContentControl,RegionManager);

你能在所有地方检查一下你的EmployeeDetailsVeiwRegion拼写吗?您有
视图
拼写
Veiw
。一个简单的打字错误(甚至是错误的情况)都会导致它失败。我过去也有过这种错误。造成这种情况的原因是,我在代码的不同部分有一个不同的区域管理器实例。@HiTech Magic是的,我已经检查了拼写错误,它们不是相同的problem@Gus如何使区域管理器成为代码中不同部分的同一实例?您是否使用unity来确保只创建了一个实例区域经理?此外,您应该在获取区域之前验证视图是否已创建,因为RegionManager不知道该区域。从您的代码来看,您似乎试图在创建视图之前先获取区域。但不是用于视图发现,也不是用于视图注入?不是。这会将视图添加到您的区域。@Hoang Bulk
RegisterViewWithRegion
是视图发现,而不是视图注入。
this.regionManager.RegisterViewWithRegion("EmployeeDetailsVeiwRegion",
    typeof(EmployeeDetailsView));
IRegionManager regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
regionManager.Regions.Remove("EmployeeDetailsViewRegion");
RegionManager.SetRegionManager(this.EmployeeDetailsContentControl, regionManager);