C#棱镜导航问题

C#棱镜导航问题,c#,.net,navigation,prism,C#,.net,Navigation,Prism,我有两个区域。导航区域和主区域 我的导航区域包含两个按钮,它们调用RequestNavigate方法。 第一个按钮加载没有任何参数的视图 this.tRegionManager.RequestNavigate(RegionNames.MainRegion, ViewNames.VInfoMainViewUri); this.tRegionManager.RequestNavigate(RegionNames.MainRegion, new Uri(ViewNames.VInfoMainVi

我有两个区域。导航区域和主区域

我的导航区域包含两个按钮,它们调用RequestNavigate方法。 第一个按钮加载没有任何参数的视图

this.tRegionManager.RequestNavigate(RegionNames.MainRegion, ViewNames.VInfoMainViewUri);
  this.tRegionManager.RequestNavigate(RegionNames.MainRegion, new Uri(ViewNames.VInfoMainViewUri.OriginalString + "" + query.ToString(), UriKind.Relative));
第二个按钮应加载具有某些参数的相同视图

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);

}
区域不包含指定的视图。 参数名称:视图


如何解决此问题?

如果要创建新视图,即使区域中已有相同类型的现有视图,也需要在视图或视图模型中实现
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章对所有这些都进行了更详细的解释;它们也有。

如果要创建新视图,即使该区域中已经存在相同类型的现有视图,也需要在视图或视图模型中实现
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章中有更详细的解释;它们也有