我有两个区域。导航区域和主要区域。
我的导航区域包含两个调用 RequestNavigate 方法的按钮。 第一个按钮加载一个没有任何参数的 View
this.tRegionManager.RequestNavigate(RegionNames.MainRegion, ViewNames.VInfoMainViewUri);
第二个按钮应该加载带有一些参数的相同 View
this.tRegionManager.RequestNavigate(RegionNames.MainRegion, new Uri(ViewNames.VInfoMainViewUri.OriginalString + "" + query.ToString(), UriKind.Relative));
如果没有加载 View ,这会正常工作。如果加载了任何 View ,则单击任何按钮都不会产生任何结果。
我试图从我的区域中删除所有事件 View ,但这会导致错误
IViewsCollection col = tRegionManager.Regions[args.RegionName].Views;
foreach (var obj in col)
{
tRegionManager.Regions[args.RegionName].Remove(obj);
}
The region does not contain the specified view. Parameter name: view
我该如何解决这个问题?
最佳答案
如果您想要创建一个新 View ,即使该区域中已经存在相同类型的现有 View ,您需要在您的 View 或 View 模型(Prism将首先检查 View ,如果它没有实现 INavigationAware
,它还会检查 ViewModel。
您对 IsNavigationTarget
方法特别感兴趣,它会告诉 Prism 是否应重用当前的 View 实例,或者是否应创建另一个实例来满足导航请求。因此,要始终创建一个新 View ,您需要执行以下操作:
public class MyViewModel : INavigationAware {
bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
{
return false;
}
void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
{
}
void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
{
}
}
所有这些都在 Prism 4 文档的第 8 章中进行了更详细的解释;他们还有an illustration of how it works .
关于C# Prism导航问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5648115/