2015-02-12 25 views
5

Ich habe ein Problem für die Navigation in meiner App. Ich benutze xamarin.forms, wie kann ich meinen Navigationsstapel reinigen. Keine Verwendung Pop und Push. Kann ich meinen vollständigen Navigationsstapel sehen?Wie lösche ich den Navigationsstapel?

Antwort

23

In der neuesten Version von Xamarin.Forms können Sie Ihren Navigationsstapel mit

Navigation.NavigationStack 

daher könnten Sie ein

var existingPages = Navigation.NavigationStack.ToList(); 
foreach(var page in existingPages) 
{ 
    Navigation.RemovePage(page); 
} 

Dieser Code hinter einem müßte gehen in Ihren Code verwenden sehen Navigationsseite oder etwas, das INavigation implementiert.

Weitere Informationen Xamarin.Forms.INavigation Members

+0

Großartig, ich benutze alte Version und habe keine NavigationStack – Ibrahim

+0

@ibrahim Sie können Ihre Version über Nuget aktualisieren. Gehen Sie zu Referenzen in Ihrem Projekt und klicken Sie mit der rechten Maustaste und klicken Sie auf nuget-Pakete verwalten. Dann wählen Sie Updates und installieren Xamarin.Forms Update – user1

+0

Ja, ich weiß, ich habe nur den Grund für die Frage geschrieben. Denn mit der neuen Version ist diese Frage dumm. danke – Ibrahim

1

Dies ist eine Funktion, die ich gemacht, den Stapel zu leeren und zu einer bestimmten Seite zu navigieren. (Der Anwendungsfall war die App wurde deaktiviert während des Gebrauchs und ich brauche den Benutzer rausschmeißen)

public async Task PopAllTo(ViewModel vm) 
    { 
     if (vm == null) return; 
     Page page = PreparePage(vm); //replace 'page' with the page you want to reset to 
     if (page == null) return; 
     _navigation.InsertPageBefore(page, _navigation.NavigationStack.First()); 
     await _navigation.PopToRootAsync(); 
    } 
+0

Funktioniert perfekt –

0

Sie können versuchen, diese ...

public void ResetNavigationStack() 
    { 
     if (_navigation != null && _navigation.NavigationStack.Count() > 0) 
     { 
      var existingPages = _navigation.NavigationStack.ToList(); 
      foreach (var page in existingPages) 
      { 
       _navigation.RemovePage(page); 
      } 
     } 
    } 

und BOOOM !!! dieser nav-stack ist abgeräumt, brotha!

Oder wenn Sie wollen, setzen Sie den modalen Stapel

public async Task<Page> PopAllModals() 
    { 
     Page root = null; 

     if (_navigation.ModalStack.Count() == 0) 
      return null; 

     for (var i = 0; i <= _navigation.ModalStack.Count(); i++) 
     { 
      root = await _navigation.PopModalAsync(false); 
     } 
     return root; 
    } 

Und BOOOM! Diese Modale sind weg!

Verwandte Themen