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

如何解决这个问题?

c# Prism导航问题

如果你想创建一个新的视图,即使在该地区已经存在相同类型的视图,你需要在你的视图或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章中有更详细的解释;他们也有一个如何工作的插图