多个区域内的 PRISM RegionManager 区域

Posted

技术标签:

【中文标题】多个区域内的 PRISM RegionManager 区域【英文标题】:PRISM RegionManager region within multiple regions 【发布时间】:2016-07-29 20:19:33 【问题描述】:

我发现自己在尝试解决以下情况时遇到了困难:

我有两个视图,每个视图都有 1 个区域,我们将它们称为 View1.RegionA、View2.RegionB。 我正在将一个控件注册到这些区域,我们称之为控件。 控件还有一个区域(Control.Region),我在其中注册另一个控件,我们称之为 SubControl

|Module_A
  -View1
  --RegionA
|Module_B
  -View2
  --RegionB
|Module_C
  -Control
  --Control.Region
  -Subcontrol

当我尝试打开包含 View1 和 View2 的 MainView 时,出现以下错误:

“具有给定名称的区域已注册:Control.Region”

我已经尝试使用Scoped regions 解决这个问题,但是当我这样做时,我的应用程序崩溃了,它试图在应用程序启动时实例化视图,这导致我的应用程序崩溃,因为此时没有初始化大量对象.

我也尝试绑定到 Control.Region.RegionName 属性,但在这种情况下,我的 RegionContext 没有设置并且得到与开始时相同的错误。

还有其他解决方案吗?

【问题讨论】:

【参考方案1】:

发生这种情况是因为您显示了多个 Control.Region 实例,并且由于您只允许拥有唯一的区域名称,因此会引发异常。你走在正确的轨道上。您必须使用作用域区域来解决此问题。您很可能在您的作用域区域的实现中做错了什么。您的帖子中没有足够的信息来确定那是什么,但我在这个 PluralSight 课程中涵盖了范围区域,这应该可以帮助您朝着正确的方向前进:

https://app.pluralsight.com/library/courses/prism-showing-multiple-shells/table-of-contents

【讨论】:

嗨,布赖恩,感谢您的回复!我在您的课程早期就注意到了一个区别,那就是我使用区域管理器略有不同,使用 RegisterViewWithRegion,它只会在视图显示时实例化视图,并且在到目前为止的所有 ScopedRegion 示例中,我必须将视图添加到区域管理器时实例化视图。有没有办法做到这一点而不必实例化它?因为这就是它对我来说失败的原因。 老实说,我从未将 RegisterVIewWithRegion 与 Scoped 区域一起使用,主要是因为您必须首先创建作用域区域,这通常在注入视图时完成。如果您愿意,可以使用导航,这样您就不必创建任何视图对象。 我刚刚找到了答案:msdn.microsoft.com/en-us/library/ff921174(v=pandp.40).aspx“如果您需要范围区域管理器,则不应使用视图发现组合” 我可以使用导航是什么意思?

以上是关于多个区域内的 PRISM RegionManager 区域的主要内容,如果未能解决你的问题,请参考以下文章

Prism区域异常问题分析(导航失效?)

Prism:如何在区域中注入视图模型实例?

C# / WPF / Prism : 关于如何创建包含其他动态区域的动态棱柱区域的建议

如何使用 PRISM 获取区域中的当前活动视图?

Prism入门之区域(Region)管理

如何在 Prism 中为我的对话窗口设置区域管理器?