Я пытаюсь загрузить страницы из файлов 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.