![](/img/trans.png)
[英]Navigation to a view but occurred Exception Region with the given name is already registered
[英]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.