Xamarin Forms Navigation.PushAsync работает только один раз - PullRequest
0 голосов
/ 30 октября 2019

В нашем приложении Xamarin Forms у нас есть несколько страниц. Когда мы впервые переходим на другую страницу с главной страницы навигации, она работает как положено. Когда мы затем используем кнопку «Назад» (в приложении или системной кнопке Android) и снова переходим на следующую страницу, она не загружается. Он меняет заголовок, но показывает пустую страницу.

Не имеет значения, какую страницу вы используете в качестве первой страницы для перехода, а какая страница является второй страницей для перехода. Это также не работает, если первая и вторая страницы - это одна и та же страница.

В приложении мы инициализируем главную страницу следующим образом:

MainPage = new NavigationPage(new MainPage());

MainPage - TabbedPage.

Мы просто перемещаемся так:

if (Application.Current.MainPage is NavigationPage mainPage)
{
    await mainPage.Navigation.PushAsync(new DetailPage());
}

Это работало раньше, но я думаю, что во время обновления Xamarin.Forms с 4.2.0.848062 до 4.3.0.947036 оно сломалось. Но я не могу найти ничего, что могло бы помешать этому, это заметки о выпуске.

== Редактировать ==

Мы увидели некоторую несогласованность во всех вызовах для навигации. Итак, мы создали вспомогательный класс для всей навигации. Теперь это выглядит следующим образом:

    public static class NavigationHelper
{
    public static void NavigateTo(Page page)
    {
        if (Application.Current.MainPage is NavigationPage mainPage)
        {
            Device.BeginInvokeOnMainThread(async () =>
            {
                await mainPage.Navigation.PushAsync(page);
            });
        }
    }
}

Итак, теперь мы перемещаемся только так:

NavigationHelper.NavigateTo(new DetailPage());

Но это по-прежнему не решает проблему. Первый раз, когда мы получаем правильную страницу, во второй навигации мы получаем пустой экран. Заголовок на панели навигации меняется на заголовок страницы, к которой мы переходим. Но остальное остается пустым.

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Я нашел это с некоторой помощью. В окне вывода мы нашли сообщение

System.ObjectDisposedException: невозможно получить доступ к удаленному объекту.

Это произошло, когда мы вернулись на предыдущую страницу и сделали невозможнымперейти на следующую страницу. Оказалось, ошибка в представлении модели. Мы пытались добавить элементы в наблюдаемый список, который уже был удален. Исправление этой ошибки решило проблему с навигацией.

0 голосов
/ 30 октября 2019

Вы не забыли использовать «Навигацию» приложения (NavigationPage ).Current.MainPage;- а не текущие страницы навигации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...