棱镜导航 - 上一个和下一个视图
我正在开发一个使用棱镜和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);
则可以通过上述代码
区域之间导航