2

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

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

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

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

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

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

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

4

1 回答 1

1

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

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

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

于 2013-01-08T12:37:40.873 回答