2015-02-12 5 views
5

У меня проблема для навигации в моем приложении. Я использую xamarin.forms, как очистить мой стек навигации. Не использовать Pop и push. Могу ли я увидеть свой полный навигационный стек?Как очистить стек навигации?

ответ

23

В последней версии Xamarin.Forms вы можете увидеть стек навигации с помощью

Navigation.NavigationStack 

поэтому вы можете использовать

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

Этот код должен идти в код позади Страница навигации или что-то, что реализует «Инавигация».

Более подробная информация Xamarin.Forms.INavigation Members

+0

Отлично, я использую старую версию и не имею NavigationStack – Ibrahim

+0

@ibrahim, вы можете обновить свою версию через nuget. перейдите к ссылкам в своем проекте и щелкните правой кнопкой мыши и выберите управление пакетами nuget. Затем выберите «Обновления» и установите обновление Xamarin.Forms – user1

+0

Да, я знаю, я только что написал причину вопроса. Потому что с новой версией этого вопроса глупо. спасибо – Ibrahim

1

Это функция, которую я сделал, чтобы очистить стек и перейти к указанной странице. (Прецедент был приложение было деактивированы во время использования, и мне нужно пнуть пользователя из)

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

Прекрасно работает –

0

Вы можете попробовать это ...

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

и BOOOM !!! этот навигационный стек очищен brotha!

Или, если вы хотите сбросить модальный стек

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

И BOOOM! эти модалы исчезли!

Смежные вопросы