2014-09-20 112 views
3

我正在開發一個使用棱鏡和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你的建議。

回答

5

這是我如何解決它:

從MenuViewModel,我到RegionManager一個參考,這樣我就可以訪問主要區域,它的導航服務:

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

可以使用底部代碼前面或前部區域

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()*/ } 
0
var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>(); 
var moduleAView = new Uri("ModuleAContentView", UriKind.Relative); 
regionManager.RequestNavigate("ContentRegion", moduleAView); 

則可以通過上述代碼

區域之間導航