棱镜导航 - 上一个和下一个视图

棱镜导航 - 上一个和下一个视图

问题描述:

我正在开发一个使用棱镜和MVVM的wpf应用程序。棱镜导航 - 上一个和下一个视图

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

我试图在菜单区域(包含MenuView)中实现一个BACK和FORWARD按钮,就像我们在任何浏览器中一样: 假设我有5个视图:View1,View2,View3,View4, View5。
当我启动应用程序时,View1显示在主区域中。就目前而言,我希望这些按钮被禁用。 现在,我选择导航到View3:View3显示在主区域中,然后返回btn变为启用(转发btn保持禁用状态)。然后,我导航到View2,并显示在主区域。

现在,当我点击返回btn时,视图3显示在主区域中,并且转发btn变为启用。 我点击转发,现在显示查看2,转发btn被禁用。

我使用导航杂志尝试,如下面的链接解释说: http://msdn.microsoft.com/en-us/library/gg430861(v=pandp.40).aspx

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

重点在于我想要在MenuView中显示这些按钮 - 在所有应用程序生命周期内在菜单区域中显示的唯一视图。后退和前进按钮在主区域中的视图之间来回切换。会appreaciate你的建议。

这是我如何解决它:

从MenuViewModel,我到RegionManager一个参考,这样我就可以访问主要区域,它的导航服务:

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

可以使用底部代码前面或前部区域

xml文件

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

视图模型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()*/ } 

var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>(); 
var moduleAView = new Uri("ModuleAContentView", UriKind.Relative); 
regionManager.RequestNavigate("ContentRegion", moduleAView); 

则可以通过上述代码

区域之间导航