Prism.Forms NavigationService со страницами, загруженными из xaml - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь загрузить страницы из файлов xaml, а затем перенести их в стек навигации призмы.Для этого я добавил следующие методы в свой NavigationService:

public class MyNavigationService : PageNavigationService, IMyNavigationService
{
    public async Task<INavigationResult> NavigateAsync(Page page, INavigationParameters parameters, bool? useModalNavigation, bool animated)
    {
        var result = new NavigationResult();
        try
        {
            NavigationSource = PageNavigationSource.NavigationService;

            await ProcessNavigation(GetCurrentPage(), page, parameters, useModalNavigation, animated);
            result.Success = true;
            return result;
        }
        catch (Exception ex)
        {
            _logger.Log(ex.ToString(), Category.Exception, Priority.High);
            result.Exception = ex;
            return result;
        }
        finally
        {
            NavigationSource = PageNavigationSource.Device;
        }
    }

    protected virtual async Task ProcessNavigation(Page currentPage, Page nextPage, INavigationParameters parameters, bool? useModalNavigation, bool animated)
    {
        if (nextPage == null)
            return;

        if (currentPage == null)
        {
            throw new NotImplementedException();
            //await ProcessNavigationForRootPage(nextPage, parameters, useModalNavigation, animated);
            return;
        }

        if (currentPage is ContentPage)
        {
            await ProcessNavigationForContentPage(currentPage, nextPage, parameters, useModalNavigation, animated);
        }
        else if (currentPage is NavigationPage)
        {
            //await ProcessNavigationForNavigationPage((NavigationPage)currentPage, nextPage, parameters, useModalNavigation, animated);
            throw new NotImplementedException();
        }
        else if (currentPage is TabbedPage)
        {
            //await ProcessNavigationForTabbedPage((TabbedPage)currentPage, nextPage, parameters, useModalNavigation, animated);
            throw new NotImplementedException();
        }
        else if (currentPage is CarouselPage)
        {
            //await ProcessNavigationForCarouselPage((CarouselPage)currentPage, nextPage, parameters, useModalNavigation, animated);
            throw new NotImplementedException();
        }
        else if (currentPage is MasterDetailPage)
        {
            //await ProcessNavigationForMasterDetailPage((MasterDetailPage)currentPage, nextPage, parameters, useModalNavigation, animated);
            throw new NotImplementedException();
        }
    }

    /// <summary>
    ///     Processes a navigation for a content page.
    /// </summary>
    /// <param name="currentPage">The current page.</param>
    /// <param name="nextPage">The page to navigate to.</param>
    /// <param name="parameters">Navigation parameters</param>
    /// <param name="useModalNavigation">If <c>true</c> uses PopModalAsync, if <c>false</c> uses PopAsync.</param>
    /// <param name="animated">If <c>true</c> the transition is animated, if <c>false</c> there is no animation on transition.</param>
    /// <returns>Navigation task</returns>
    protected virtual async Task ProcessNavigationForContentPage(Page currentPage, Page nextPage, INavigationParameters parameters, bool? useModalNavigation, bool animated)
    {
        await ProcessNavigation(nextPage, new Queue<string>(), parameters, useModalNavigation, animated);

        await DoNavigateAction(currentPage, string.Empty, nextPage, parameters, async () =>
        {
            await DoPush(currentPage, nextPage, useModalNavigation, animated);
        });
    }
}

Навигация по этим страницам работает и отображается правильно.Но когда я пытаюсь перейти дальше (через navigationService.NavigateAsync("ViewName");), он ничего не делает, даже если NavigationResult.Success верно.Страница «ViewName» является зарегистрированным ContentPage (зарегистрированным через container.Register< ViewName, ViewNameViewModel >()).

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

Имееткто-то сделал что-то подобное и мог бы помочь мне?

РЕДАКТИРОВАТЬ: Я заметил, что если я хочу отойти от моей загруженной xaml страницы, каким-то образом метод GetCurrentPage() и локальное поле _page возвращаетСтраница со всем установленным нулем вместо страницы, которую я загрузил из xaml.

...