3

我有一个基于 Prism 2009 年 2 月发布的 WPF 项目,设置为:

Shell 将单个 ContentControl 公开为“MainRegion” 在名为 SplitView 的基础结构项目中定义的另一个视图(用户控件)公开了两个附加区域“LeftRegion”和“RightRegion”,也作为 ContentControl。

我的应用程序的一些模块需要在 MainRegion(一个用户控件)中显示它们的视图,而其他模块需要在 LeftRegion 和 RightRegion 中显示它们的视图(两个用户控件以拆分方式)。

我已经尝试使用范围区域,假设特定的控制器将持有对范围区域的引用。所以基本上每个对 SplitView 功能感兴趣的控制器都应该实例化一个新的 SplitView(用户控件)并在 MainRegion 中激活它,同时在新创建的作用域SplitView 区域的 LeftRegion 和 RightRegion 中激活它的两个用户控件。

我正在使用带有视图注入的 MVVM 来显示视图。

不用说,这种方法出现了可怕的错误。

在运行时我得到这个异常,“创建一个名为‘LeftRegion’的区域时发生异常。异常是:System.InvalidOperationException:指定元素已经是另一个元素的逻辑子元素。首先断开它。”

我是否正确假设每次实例化 SplitView 时 LeftRegion 和 RightRegion 都试图向主 RegionManager 注册自己?

对令人困惑/冗长的帖子感到抱歉。有什么建议么?实现这一目标的最佳实践?

提前致谢,

阿里

4

1 回答 1

1

“指定元素已经是逻辑子元素......”的例外是当您尝试将某些内容添加到树中的两个位置时会发生什么,所以我想您的代码中可能存在一些逻辑错误,或者您添加了两次.

我通常像这样创建我的子区域:

    m_scopedRegionName = Guid.NewGuid().ToString(); /* EXAMPLE ! */
    m_scopedRegionManager =  m_regionManager.Regions[RegionNames.WORKSPACE_REGION].Add(myViewModel.View, m_scopedRegionName, true);
    m_someThingRegion = m_scopedRegionManager.Regions[RegionNames.SOME_THING_REGION];

然后我将任何新内容添加到“m_someThingRegion”中。

于 2009-10-06T01:42:49.200 回答