2017-04-04 65 views
2

我在做xamarin開發,我沒有做表格。如何返回mvvm燈中的多個視圖模型

我想3 viewcontrollers /活動回去,但GoBack的方法是通過一個視圖控制器或活動

回去如果我使用的NavigateTo我認爲一個更多的時間viewcontrolller /活動得到added.i.e兩個實例。

那麼如何解決這個問題呢?

更新: 這裏是inavigation接口是沒有辦法訪問THR導航堆棧以及

enter image description here

回答

2

如果你回去,然後使用INavigationService.GoBack();。你可以連續調用3次返回3頁。

private void GoBackThree() 
{ 
    _navigationService.GoBack(); 
    _navigationService.GoBack(); 
    _navigationService.GoBack(); 
} 
+0

但不會transistion看壞 – Veeravel

+0

是否有可能削減過渡,並使它看起來像另外一個是在頂部 – Veeravel

+0

ATLEAST推,如果我們能去無迴轉型3次,它會是不錯的 – Veeravel

2

我以前沒有使用過MVVM Light,但是我有相當多的Xamarin Forms的經驗。我曾經使用MVVM Cross進行導航,但最終發現內置的Xamarin表單導航要好得多,我遇到了類似的情況,就像你在這裏所做的一樣。

下,它看起來像MVVM光只是包裹Xamarin引擎蓋窗體導航反正 - http://mvvmlight.codeplex.com/SourceControl/latest#Samples/Flowers/Flowers.Forms/Flowers.Forms/Helpers/NavigationService.cs

我不認爲你需要放棄對MVVM燈導航,但你確實需要引擎蓋下得到實現導航沒有看到三個轉換。我還沒有嘗試過MVVM Light,但它對正常的窗體導航非常有用。

步驟1

到底層Xamarin可以訪問窗體導航:

var navigation = Application.Current.MainPage.Navigation; 

步驟2

刪除要導航回來時跳過兩頁。在向後導航之前將它們刪除非常重要,否則您將會發生雙重轉換(請注意-2是因爲您要刪除倒數第二頁)。

var firstPageToRemove = navigation.NavigationStack[navigation.NavigationStack.Count - 2]; 
navigation.RemovePage(firstPageToRemove); 

var secondPageToRemove = navigation.NavigationStack[navigation.NavigationStack.Count - 2]; 
navigation.RemovePage(secondPageToRemove); 

步驟3

導航向後

_navigationService.GoBack(); 

我希望你的作品。

另類思考

我有我的應用程序類似的應用程序,我已經解決了一點點更優雅。如果你知道你永遠不需要能夠回到那些先前的頁面。當你推新頁面時,如果你不再需要它,你實際上可以刪除以前的頁面。請注意,您必須在之後刪除頁面,然後再按下新的頁面,否則您將得到兩個轉換。我在標準的Forms Navigation上使用這種擴展方法,我向您展示瞭如何在步驟1中訪問以實現它。

public static async Task ReplaceCurrentAsync(this INavigation navigation, Page page, bool animated = false) 
{ 
    var curentPage = navigation.NavigationStack.Last(); 

    await navigation.PushAsync(page, animated); 

    navigation.RemovePage(curentPage); 
} 
+0

請檢查問題更新 – Veeravel

+1

無法在MVVM燈中接受導航堆棧 – Veeravel

+2

我知道無法從MVVM燈訪問導航堆棧。這就是爲什麼我給你在第1步中的代碼,它將訪問底層的導航堆棧。你嘗試了三個步驟嗎? –