Xamarin - metoda InsertPageBefore(), a przełączanie między istniejącymi obiektami

Xamarin - metoda InsertPageBefore(), a przełączanie między istniejącymi obiektami
ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 99
0

Witam, mam mały problem. Używam takiego kodu do przełączania się między stronami:

Kopiuj
private FirstPage firstPage; 
private SecondPage secondPage = new SecondPage();
private ThirdPage thirdPage = new ThirdPage(); 
private async void ItemSelectedMethod()
{
        var root = App.NavigationPage.Navigation.NavigationStack[0];
        if (SelectedItem == Items[0])
        {
            if (!IsFirstChoose)
            {
                App.NavigationPage.Navigation.InsertPageBefore(firstPage, root);
                await App.NavigationPage.PopToRootAsync(false);
            }
        }
        if (SelectedItem == Items[1])
        {
            App.NavigationPage.Navigation.InsertPageBefore(secondPage, root);
            await App.NavigationPage.PopToRootAsync(false);
        }
        if (SelectedItem == Items[2])
        {
            App.NavigationPage.Navigation.InsertPageBefore(thirdPage, root);
            await App.NavigationPage.PopToRootAsync(false);
        }

        IsFirstChoose = false;
        rootPageViewModel.IsPresented = false;
}

Niestety na najnowszej wersji Xamarina (2.3.5.256-pre6) powoduje on wyjątek:
System.ArgumentException: 'Cannot insert page which is already in the navigation stack'
Co ciekawe na najnowszej stabilnej wersji Xamarina ten wyjątek nie występuje, a aplikacja działa prawidłowo na Androidzie i na wersji komputerowej Windowsa 10, jednak na Windowsie 10 Mobile apka przy przełączaniu stron sypie nieobsłużonym wyjątkiem... Wychodzi, więc na to, że naprawili coś co powodowało te crashe i teraz zamiast nieobsłużonego wyjątku sypie właśnie tym powyższym (przynajmniej wiadomo o co chodzi). Kiedy przemianuję kod na:

Kopiuj
            App.NavigationPage.Navigation.InsertPageBefore(new ThirdPage(), root);
            //oraz pozostałe

To wszystko dobrze działa na obydwóch wersjach Xamarina. No właśnie... tylko jest taki problem, że ja nie chcę tworzyć za każdym przełączeniem się między stronami, nowych obiektów tychże stron. Powód jest jeden - trwa to zbyt długo (przez operacje wykonywane w konstruktorze). Z opisu wyjątku wynika, że przed przełączeniem strony powinienem najpierw usunąć ją ze "stack'a". Próbowałem rozwiązać to, poprzez dodanie takiego kodu, na początku powyższej metody:

Kopiuj
            var existingPages = App.NavigationPage.Navigation.NavigationStack.ToList();
            for (int i = 1; i < existingPages.Count; i++)
            {
                App.NavigationPage.Navigation.RemovePage(existingPages[i]);
            }

Niestety bez skutku... Aplikacja dalej sypie tym samym wyjątkiem... Czy ktoś byłby mi w stanie pomóc?

Z góry dzięki :)

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 99
0

Problem rozwiązany. Moje podejście było złe. Należy zrobić coś na wzór tego: https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/navigation/master-detail-page/

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.