web-dev-qa-db-fra.com

Comment effacer la pile de navigation?

J'ai un problème de navigation dans mon application. J'utilise xamarin.forms comment nettoyer ma pile de navigation. Pas besoin de Pop and Push. Puis-je voir ma pile de navigation complète?

15
Ibrahim

Dans la dernière version de Xamarin.Forms, vous pouvez voir votre pile de navigation en utilisant

Navigation.NavigationStack

vous pouvez donc utiliser un

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

Ce code devrait entrer dans votre code derrière une page de navigation ou quelque chose qui implémente INavigation.

Plus d'informations Membres Xamarin.Forms.INavigation

39
user1

Il s'agit d'une fonction que j'ai créée pour vider la pile et naviguer vers une page spécifiée. (Le cas d'utilisation était que l'application a été désactivée pendant l'utilisation et je dois expulser l'utilisateur)

    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();
    }
8
James Wierzba

Vous pouvez essayer ceci ...

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

et BOOOM !!! cette pile de navigation est effacée brotha!

Ou si vous voulez réinitialiser la pile modale

    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;
    }

Et BOOOM! ces modaux sont partis!

5
Egli Becerra