【问题标题】:Prism navigation - previous and next viewPrism 导航 - 上一个和下一个视图
【发布时间】:2014-09-20 11:21:37
【问题描述】:

我正在使用 prism 和 MVVM 开发一个 wpf 应用程序。

我有一个主 shell,它有两个区域:菜单区域和主区域。

我正在尝试在菜单区域(其中包含 MenuView)中实现 BACK 和 FORWARD 按钮,就像我们在任何浏览器中一样: 假设我有 5 个视图:View1、View2、View3、View4、View5。
当我启动应用程序时,View1 显示在主区域中。目前,我希望禁用这些按钮。 现在,我选择导航到 View3: View3 显示在 Main Region 中,然后 Back btn 启用(forward btn 保持禁用状态)。然后,我导航到 View2,它显示在 Main Region 中。

现在,当我单击 Back btn 时,视图 3 显示在 Main Region 中,并且 Forward btn 启用。 我点击前进,现在显示视图 2,前进 btn 被禁用。

我已尝试使用导航日志,如以下链接所述: http://msdn.microsoft.com/en-us/library/gg430861(v=pandp.40).aspx

但是没有成功,因为我做了他们在 MenuViewModel 中提到的事情,这是整个应用程序生命周期中唯一显示在菜单区域中的视图(并且只有主区域切换视图)。这就是为什么永远不会调用 OnNavigatedTo 方法的原因,因为我永远不会导航到 MenuView,这会导致 navigationService 始终为空。

主要的一点是,我希望 MenuView 中的这些按钮 - 在整个应用程序生命周期中显示在菜单区域中的唯一视图。后退和前进按钮在主要区域中的视图之间导航 - 来回。非常感谢您的建议。

【问题讨论】:

    标签: c# wpf mvvm prism-4


    【解决方案1】:

    我就是这样解决的:

    从 MenuViewModel 中,我引用了 RegionManager,因此我可以访问主要区域及其导航服务:

    var mainregion = _regionManager.Regions[RegionNames.mainregion];
    mainregion.NavigationService.Journal.GoForward();
    

    【讨论】:

      【解决方案2】:

      您可以将底部代码用于前一个或前一个区域

      xml文件

      <Button Command="{Binding GoBackCommand}" Content="GoBack" />
      

      ViewModel C#

      private readonly IRegionManager _regionManager;
      public ICommand GoBackCommand { get; set; }
      public ClassName(IRegionManager regionManager)
      {
          _regionManager = regionManager;
          GoBackCommand = new DelegateCommand(GoBack, CanGoBack);
      }
      
      private bool CanGoBack()
      {  return _regionManager.Regions[RegionNames.MainRegion].NavigationService.Journal.CanGoBack;/*or CanGoForward */}
      
      private void GoBack()
      { _regionManager.Regions[RegionNames.MainRegion].NavigationService.Journal.GoBack();/*GoForward()*/ }
      

      【讨论】:

        【解决方案3】:
        var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
        var moduleAView = new Uri("ModuleAContentView", UriKind.Relative);
        regionManager.RequestNavigate("ContentRegion", moduleAView);
        

        您可以通过上面的代码在区域之间导航

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-04-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多