我正在使用WPF,Unity和Prism 4开发.Net应用程序。该应用程序将包含一个外壳,该外壳在选项卡页上具有多个视图。该应用程序严重依赖于名为SystemTreeModule的模块,该模块包含将在许多地方出现的SystemTreeView

我刚刚完成了第一个视图,在其中定义了一个名为“ SystemTreeRegion”的区域。在SystemTreeModule中,我在该区域注册了SystemTreeView的实例。奇迹般有效! SystemTreeView类型是使用Unity的自动发现功能发现的(因此未明确注册):

public void Initialize()
{
    _regionManager.RegisterViewWithRegion("SystemTreeRegion", () => _container.Resolve<SystemTreeView>());
}


现在是时候在我要使用SystemTreeView的第二个模块上开始工作了。当我在新视图中创建一个名为“ SystemTreeRegion”的区域时,我感到非常有信心,但是由于以下异常而失败:


  创建名称为“ SystemTreeRegion”的区域时发生异常。
      异常是:System.ArgumentException:具有给定名称的区域已经注册:SystemTreeRegion


所以我已经用谷歌搜索了StackOverflow并找到了答案,但是我还没弄清楚你应该怎么做!

我什至无法告诉我是否只是在漏掉一些细节,或者从概念上讲我还没有离开……

最佳答案

从概念上讲,您并非遥不可及。通过模块提供视图是完全可以的。但是请记住,您的应用程序中只能有一个名为“ SystemTreeRegion”的视图,因为否则Prism的区域管理器将不知道您要访问哪个视图。

考虑到这一点-如果您尝试将视图注册到某个区域的名称,并希望该视图会出现在带有该名称的每个区域中,则从概念上讲您是错误的。您只能将视图注册到区域。

因此,只需确保每个区域都有其自己的唯一名称,然后注册该区域所需的视图就可以了。

10-01 03:25