繁体   English   中英

复合视图-视图已存在于区域错误中

[英]Composite view - View already exists in region error

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

我的观点之一非常复杂,并且ViewModel变得庞大且难以管理。 因此,我决定使用自己的ViewModels将其拆分为较小的视图。

我已经在视图上放置了一个区域,并使用来自“主” ViewModel构造函数的regionManager.RegisterViewWithRegion方法将子视图加载到该区域中。

当仅加载一个视图实例时,该方法可以按预期工作。 但是,当我打开该屏幕的第二个实例(将它作为DocumentContent加载到AvalonDock的DocumentPane中)时,出现“视图已存在于区域中”错误​​。

如果可能的话,我想避免给该地区起一个唯一的名字。 有没有办法表明我要向“主”视图的特定实例添加子视图? 任何建议如何做到这一点?

如果您使用的是MEF,并且您的视图为Singleton,即

[PartCreationPolicy(CreationPolicy.Shared)]

并且您的INavigationAware在以下INavigationAware返回false

public override bool IsNavigationTarget(NavigationContext navigationContext)

{返回假;}

您将收到此错误。

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

到此为止。

我担心您不能在多个地区使用相同的名称。 当视图模型变得复杂时,我不希望拆分视图。 您可以将视图模型分为几个专门的视图模型。

一个例子。 您有一个用户管理。 一种视图模型是所有用户的列表。 此列表包含用户视图模型。 每个用户视图模型都包含一个用户权限视图模型的实例,该实例本身又是仅代表一个用户权限的视图模型的列表。 因此,有关如何呈现特殊用户权限的逻辑进入对应的视图模型,而不是“主”用户列表视图模型。 这样,您可以将关注点分离为不同的视图模型。

绑定到那些视图模型就像只有一个视图模型一样简单。 只是路径越来越长。 当数据上下文是上例中的用户列表视图模型时,可以适当地使用诸如CurrentUserVM.UserRightsVM的绑定路径来获取用户权限列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM