c# - 复合 View - View 已存在于区域错误中

标签 c# wpf mef prism-4 avalondock

我正在开发 WPF/Prism 4/AvalonDoc 应用程序。

我的一个观点非常复杂,ViewModel 变得庞大且难以管理。所以我决定用它们自己的 ViewModel 将它拆分成更小的 View 。

我在 View 上放置了一个区域,并使用“主”ViewModel 构造函数中的 regionManager.RegisterViewWithRegion 方法将 subview 加载到该区域。

当只加载 View 的一个实例时,这会像预期的那样工作。但是当我打开该屏幕的第二个实例时(它作为 DocumentContent 加载到 AvalonDock 的 DocumentPane 中)我收到“ View 已存在于区域中”错误​​。

如果可能的话,我想避免给该区域一些唯一的名称。 有没有办法表明我正在向“主” View 的特定实例添加 subview ? 关于如何做到这一点的任何建议?

最佳答案

如果您使用的是 MEF 并且您的 View 是单例的,即

[PartCreationPolicy(CreationPolicy.Shared)]

并且您的 INavigationAware

上返回 false
public override bool IsNavigationTarget(NavigationContext navigationContext)

{返回假;}

你会得到这个错误。

[PartCreationPolicy(CreationPolicy.Shared)] 更改为 [PartCreationPolicy(CreationPolicy.NonShared)]

你就完成了。

关于c# - 复合 View - View 已存在于区域错误中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7918538/

相关文章:

c# - 将 GridView 导出到 excel #2

c# - 从非 WPF 代码访问 WPF XAML 资源

wpf - 排序时复选框在 WPF Datagrid 中重置

c# - 添加了 MRU 项的 WPF 组合框

xamarin.ios - Xamarin.iOS 上的 MEF 支持

c# - 如何明确、精确地控制构图范围?

C# Azure 将文件上传到 "File Storage Service"- 不是 Blob 存储

c# - 验证引发异常的 CQS 系统

c# - WinRT 中字段的正确命名约定是什么

c# - MEF 2 - 未找到与具有多个重载的构造函数的约束相匹配的导出