public static async Task PushPopupPageAsync(this INavigationService navigationService, string name, NavigationParameters parameters = null, bool animated = true)
        {
            try
            {
                var page = CreatePopupPageByName(name);

                // Ensure resolved page is not null. This could happen if the resolved page wasn't a Popup Page
                if (page == null)
                {
                    throw new PopupPageMissingException($"It seems something went wrong. We seem to have resolved a page for '{name}', but it doesn't seem to be a Popup Page.", new ArgumentNullException(nameof(page)));
                }

                // Make sure the VML is set to either True or False
                if (ViewModelLocator.GetAutowireViewModel(page) == null)
                {
                    ViewModelLocator.SetAutowireViewModel(page, true);
                }

                var currentPage = GetCurrentPage();

                EnsureParametersContainsMode(parameters ?? (parameters = PopupUtilities.CreateNewNavigationParameters()), NavigationMode.New);

                HandleINavigatingAware(page, parameters);
                await s_popupNavigation.PushAsync(page, animated);

                HandleINavigatedAware(currentPage, page, parameters);
            }
            catch (Exception ex)
            {
                s_logger.Log(ex.ToString(), Logging.Category.Exception, Logging.Priority.High);
                throw;
            }
        }
        private static void HandleINavigatedAware(Page page, NavigationParameters parameters, bool navigatedTo)
        {
            if (page == null)
            {
                return;
            }
            if (parameters == null)
            {
                parameters = navigatedTo ?
                             PopupUtilities.CreateNewNavigationParameters() :
                             PopupUtilities.CreateBackNavigationParameters();
            }

            PageUtilities.InvokeViewAndViewModelAction <INavigatedAware>(page, (view) => {
                if (navigatedTo)
                {
                    view.OnNavigatedTo(parameters);
                }
                else
                {
                    view.OnNavigatedFrom(parameters);
                }
            });

            PageUtilities.InvokeViewAndViewModelAction <IActiveAware>(page, (view) => view.IsActive = navigatedTo);
        }
        public static async Task PopupGoBackAsync(this INavigationService navigationService, NavigationParameters parameters = null, bool animate = true)
        {
            if (s_popupStack.Count == 0)
            {
                return;
            }

            var page = s_popupStack.Last();

            EnsureParametersContainsMode(parameters ?? (parameters = PopupUtilities.CreateBackNavigationParameters()), NavigationMode.Back);

            HandleINavigatedAware(page, parameters, navigatedTo: false);
            HandleIDestructiblePage(page);

            await s_popupNavigation.PopAsync(animate);

            Page currentPage = s_popupStack.LastOrDefault();

            if (currentPage == null)
            {
                currentPage = GetCurrentPage();
            }

            HandleINavigatedAware(currentPage, parameters, navigatedTo: true);
        }
Ejemplo n.º 4
0
        public async Task GetsCorrectTopPage(string uri, Type pageType)
        {
            var app    = GetApp();
            var result = await app.GetNavigationService().NavigateAsync(uri);

            Assert.Null(result.Exception);

            var popupNavigation = app.Container.Resolve <IPopupNavigation>();
            var topPage         = PopupUtilities.TopPage(popupNavigation, app);

            Assert.IsType(pageType, topPage);

            var navService = app.Container.Resolve <INavigationService>(PrismApplicationBase.NavigationServiceName);

            if (navService is IPageAware pa)
            {
                pa.Page = topPage;
            }

            result = await navService.NavigateAsync("PopupPageMock");

            Assert.Null(result.Exception);

            topPage = PopupUtilities.TopPage(popupNavigation, app);
            Assert.IsType <PopupPageMock>(topPage);
        }