c# Prism导航问题
本文关键字:问题 导航 Prism | 更新日期: 2023-09-27 17:50:17
我有两个区域。一个导航区和一个主区。
我的导航区域包含两个调用RequestNavigate方法的按钮。第一个按钮加载一个不带任何参数的视图
this.tRegionManager.RequestNavigate(RegionNames.MainRegion, ViewNames.VInfoMainViewUri);
第二个按钮应该加载带有一些参数的相同视图
this.tRegionManager.RequestNavigate(RegionNames.MainRegion, new Uri(ViewNames.VInfoMainViewUri.OriginalString + "" + query.ToString(), UriKind.Relative));
如果没有加载视图,这可以正常工作。如果加载了任何视图,则单击任何按钮都不会产生任何结果。
我试图从我的区域中删除所有活动视图,但这会导致错误
IViewsCollection col = tRegionManager.Regions[args.RegionName].Views;
foreach (var obj in col)
{
tRegionManager.Regions[args.RegionName].Remove(obj);
}
区域不包含指定的视图。参数名称:view
如何解决这个问题?
如果你想创建一个新的视图,即使在该地区已经存在相同类型的视图,你需要在你的视图或ViewModel中实现INavigationAware
接口(Prism将首先检查视图,如果它不实现INavigationAware
,它也会检查ViewModel)。
您对IsNavigationTarget
方法特别感兴趣,它告诉Prism是否应该重用视图的当前实例,或者是否应该创建另一个实例来满足导航请求。因此,要创建一个新视图你可以这样做:
public class MyViewModel : INavigationAware {
bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
{
return false;
}
void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
{
}
void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
{
}
}
所有这些都在Prism 4文档的第8章中有更详细的解释;他们也有一个如何工作的插图