【问题标题】:Prism Error : The region manager does not contain the region棱镜错误:区域管理器不包含该区域
【发布时间】:2012-06-15 07:48:11
【问题描述】:

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

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

我已将区域定义为

    <ContentControl Name="EmployeeDetailsVeiwRegion" Margin="16" Grid.Row="1"
              prism:RegionManager.RegionName="EmployeeDetailsVeiwRegion"/>

但是当我运行代码时,我不断收到错误

  The region manager does not contain the EmployeeDetailsVeiwRegion region

尝试的解决方案

我已经尝试过其他堆栈中提出的解决方案,例如这里 a link 和其他帖子,但它不适用于我。

【问题讨论】:

  • 你能在所有地方检查你的EmployeeDetailsVeiwRegion的拼写吗?您将View 拼写为Veiw。一个简单的错字(即使是错误的大小写)都会导致它失败。
  • 我过去曾遇到过这个错误。造成这种情况的原因是我在代码的不同部分有不同的区域管理器实例。
  • @HiTech Magic 是的,我检查了拼写错误,他们不是问题
  • @Gus 如何使区域管理器在代码的不同部分中成为同一个实例
  • 您是否使用统一来确保您只创建了一个 RegionManager 实例?此外,您应该在获取区域之前验证视图是否已创建,因为 RegionManager 不会知道该区域。从您的代码看来,您尝试在创建视图之前先获取该区域。

标签: wpf prism


【解决方案1】:

终于搞定了。我在 ContentControl 上设置了区域管理器,该区域管理器包含我的演示者类(在我的情况下为 EmployeePage)承包商中的区域。

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

【讨论】:

    【解决方案2】:

    试试:

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

    【讨论】:

    • 但不是用于视图发现,也不是用于视图注入?
    • 没有。这会将视图添加到您的区域。
    • @Hoang 垃圾。 RegisterViewWithRegion 查看发现,而不是查看注入。
    猜你喜欢
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多