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

0

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

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:

            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:

            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 :)

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/

1 użytkowników online, w tym zalogowanych: 0, gości: 1