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

本文关键字:实例 视图 显示 何使用 Prism Unity | 更新日期: 2023-09-27 17:51:08

我正在使用WPF、Unity和Prism 4开发一个。net应用程序。该应用程序将由一个在选项卡页上具有多个视图的shell组成。这个应用程序很大程度上依赖于一个名为SystemTreeModule的模块,它包含了在很多地方都会出现的SystemTreeView

我刚刚完成了我的第一个视图,我定义了一个名为"systemtreereregion"的区域。在SystemTreeModule中,我用那个区域注册了SystemTreeView的一个实例。真是妙不可言!SystemTreeView类型是使用Unity的自动发现功能发现的(所以它没有显式注册):

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

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

创建名为"systemtreereregion"的区域时发生异常。例外是:System。ArgumentException:给定名称的区域已经注册:systemtreereregion

所以我都谷歌和搜索StackOverflow的答案,但我还没能弄清楚你应该如何做到这一点!

我甚至不知道是我错过了一些细节,还是我在概念上偏离了…

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

你在概念上并没有偏离。通过模块提供视图是完全可以的。但是请记住,在您的应用程序中只能有一个名为"systemtreereregion"的视图,否则Prism的区域管理器将不知道您想要访问哪个视图。

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

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