C#Prism navigationProblem

Cr3*_*0rX 1 .net c# navigation prism

我有两个地区.导航区域和主要区域.

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

this.tRegionManager.RequestNavigate(RegionNames.MainRegion, ViewNames.VInfoMainViewUri);
Run Code Online (Sandbox Code Playgroud)

第二个按钮应该使用一些参数加载相同的视图

  this.tRegionManager.RequestNavigate(RegionNames.MainRegion, new Uri(ViewNames.VInfoMainViewUri.OriginalString + "" + query.ToString(), UriKind.Relative));
Run Code Online (Sandbox Code Playgroud)

如果没有加载视图,这可以正常工作.如果加载了任何视图,则单击任何按钮都不会导致任何操作.

我试图从我的区域中删除每个活动视图,但这会导致错误

IViewsCollection col = tRegionManager.Regions[args.RegionName].Views;
foreach (var obj in col)
{
   tRegionManager.Regions[args.RegionName].Remove(obj);

}
Run Code Online (Sandbox Code Playgroud)

该区域不包含指定的视图.参数名称:view

我该如何解决这个问题呢?

Jon*_*Jon 6

如果要创建新视图,即使区域中已存在相同类型的现有视图,也需要INavigationAware在View或ViewModel中实现该接口(Prism将首先检查视图,如果它没有'实现INavigationAware它还将检查ViewModel).

您特别感兴趣的是该IsNavigationTarget方法,该方法告诉Prism是否应重用View的当前实例,或者是否应创建另一个实例来满足导航请求.因此,要始终创建一个新视图,您将执行以下操作:

public class MyViewModel : INavigationAware {
    bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
    {
        return false;
    }

    void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
    {
    }

    void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

所有这些都在Prism 4文档的第8章中有更详细的解释; 他们还举例说明了它的工作原理.