如何使用Prism和Unity显示视图的多个实例

时间:2013-01-08 12:25:38

标签: c# .net wpf prism unity-container

我正在使用WPF,Unity和Prism 4开发.Net应用程序。该应用程序将包含一个在标签页上有多个视图的shell。该应用程序在很大程度上依赖于一个名为SystemTreeModule的模块,该模块包含将出现在许多地方的SystemTreeView

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

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

现在是时候开始我想要使用SystemTreeView的第二个模块了。当我在新视图中创建名为“SystemTreeRegion”的区域时,我感到非常自信,但它失败并出现以下异常:

  

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

所以我用Google搜索并搜索了StackOverflow的答案,但我还没弄清楚你应该如何做到这一点!

我甚至无法判断我是否只是遗漏了一些细节,或者我是否在概念上偏离......

1 个答案:

答案 0 :(得分:1)

你在概念上并没有偏离。通过模块提供视图是可以的。但请记住,您的应用程序中只能有一个名为“SystemTreeRegion”的视图,否则Prism的区域经理将无法知道您要访问哪个视图。

考虑到这一点 - 如果您尝试将视图注册到某个地区的名称,并且希望该视图将显示在每个带有该名称的区域中,那么您在概念上是错误的。您只能将视图注册到某个区域。

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