【问题标题】:C# Prism navigationProblemC# Prism 导航问题
【发布时间】:2011-04-13 11:03:50
【问题描述】:

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

我的导航区域包含两个调用 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# .net navigation prism


    【解决方案1】:

    如果您想创建一个新视图,即使该区域中已经存在相同类型的视图,您需要在您的视图或您的 ViewModel 中实现INavigationAware 接口(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)
        {
        }
    }
    

    所有这些都在 Prism 4 文档的第 8 章中进行了更详细的解释;他们也有an illustration of how it works

    【讨论】:

      猜你喜欢
      • 2017-01-21
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多