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?
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
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();
}
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!