2017-04-04 1 views
2

Ich mache Xamarin Entwicklung und ich mache keine Formulare.Wie man mehr als ein Ansichtsmodell in mvvm Licht zurückgeht

Ich will zurück nach 3 Viewcontrollers/Aktivitäten gehen, aber goback Methode ist für von einem Viewcontroller oder Aktivität zurück

Wenn ich NavigateTo i ein weiteres Mal die viewcontrolller/Aktivität glauben added.i.e zwei Instanzen wird.

So, wie um dieses Problem zu lösen?

Update: Hier ist die inavigation Schnittstelle gibt es keine Möglichkeit, thr Navigationsstapel zuzugreifen sowie

enter image description here

Antwort

2

Wenn Sie zurück gehen, dann INavigationService.GoBack(); verwenden. Sie können das 3 Mal hintereinander aufrufen, um 3 Seiten zurückzugehen.

+0

Aber wird transistion nicht schlecht aussehen – Veeravel

+0

Ist es möglich, den Übergang zu schneiden und es eine andere erscheinen wie Atleast auf – Veeravel

+0

geschoben wird, wenn wir wieder 3 mal ohne Übergang gehen könnte es – Veeravel

2

Ich habe MVVM Light noch nicht benutzt, aber ich habe ziemlich viel Erfahrung mit Xamarin Forms. Früher benutzte ich MVVM Cross für die Navigation, fand aber schließlich heraus, dass die integrierte Xamarin Forms Navigation viel besser war. Ich stieß auf ähnliche Szenarien wie das, was Sie hier haben.

Unter der Haube sieht es aus wie MVVM Licht wird nur die Xamarin Einwickeln Forms Navigation sowieso - http://mvvmlight.codeplex.com/SourceControl/latest#Samples/Flowers/Flowers.Forms/Flowers.Forms/Helpers/NavigationService.cs

Ich glaube nicht, dass Sie auf MVVM Licht Navigation verzichten müssen, aber Sie müssen unter der Haube bekommen zu erreichen die Navigation ohne drei Übergänge zu sehen. Ich habe dies nicht mit MVVM Light versucht, aber es funktioniert gut mit normalen Forms Navigation.

Schritt 1

erhalten Sie Zugriff auf die zugrunde liegenden Xamarin Forms Navigation:

var navigation = Application.Current.MainPage.Navigation; 

Schritt 2

Entfernen Sie die beiden Seiten, die Sie überspringen möchten, wenn zurück zu navigieren. Es ist wichtig, dass Sie sie entfernen, bevor Sie rückwärts navigieren, sonst erhalten Sie einen doppelten Übergang (beachten Sie, dass -2 ist, weil Sie die vorletzte Seite entfernen möchten).

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

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

Schritt 3

Navigation rückwärts

_navigationService.GoBack(); 

Ich hoffe, dass für Sie arbeitet.

Alternative Berücksichtigung

Ich habe eine ähnliche Anwendung in meiner app, die ich ein wenig mehr elegant gelöst haben. Wenn Sie wissen, dass Sie nie wieder zu diesen vorherigen Seiten navigieren müssen. Wenn Sie die neuen Seiten aktivieren, können Sie die vorherige Seite entfernen, wenn Sie sie nicht mehr benötigen.Bitte beachten Sie, dass Sie die Seite nach entfernen müssen, auf die Sie drücken, ansonsten erhalten Sie zwei Übergänge. Ich verwende diese Erweiterungsmethode auf der Standard-Formularnavigation, die ich Ihnen gezeigt habe, wie Sie in Schritt 1 darauf zugreifen können.

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

Bitte überprüfen Sie die Frage Update – Veeravel

+1

Es gibt keine Möglichkeit, den Navigationsstapel in MVVM Licht Zugang – Veeravel

+2

Ich weiß, es gibt keine Möglichkeit, den Navigationsstapel von MVVM Licht zugreifen. Deshalb habe ich Ihnen in Schritt 1 den Code gegeben, der auf den zugrunde liegenden Navigationsstapel zugreift. Hast du die drei Schritte versucht? –

Verwandte Themen