public bool Navigate(string pageToken, object parameter) { Type pageType = _navigationResolver(pageToken); if (pageType != null) { if (typeof(IContentPage).GetTypeInfo().IsAssignableFrom(pageType.GetTypeInfo())) { if (!IsInShellPage()) { _frameNavigationService.Navigate("AppShell", null); InitContentFrame(); } var lastNavigationParameter = _sessionStateService.SessionState.ContainsKey(LAST_CONTENT_NAVIGATION_PARAMETER_KEY) ? _sessionStateService.SessionState[LAST_CONTENT_NAVIGATION_PARAMETER_KEY] : null; var lastPageTypeFullName = _sessionStateService.SessionState.ContainsKey(LAST_CONTENT_NAVIGATION_PAGE_KEY) ? _sessionStateService.SessionState[LAST_CONTENT_NAVIGATION_PAGE_KEY] as string : string.Empty; if (lastPageTypeFullName != pageType.FullName || lastNavigationParameter != parameter) { return(_contentFrameFacade.Navigate(pageType, parameter)); } } else { if (_contentFrameFacade != null) { _sessionStateService.UnregisterFrame(_contentFrameFacade); _contentFrameFacade = null; } return(_frameNavigationService.Navigate(pageToken, parameter)); } } return(false); }
/// <summary> /// Navigates to the page with the specified page token, passing the specified parameter. /// </summary> /// <param name="pageToken">The page token.</param> /// <param name="parameter">The parameter.</param> /// <returns>Returns <c>true</c> if the navigation succeeds: otherwise, <c>false</c>.</returns> public bool Navigate(string pageToken, object parameter) { Type pageType = _navigationResolver(pageToken); if (pageType == null) { var resourceLoader = new ResourceLoader(Constants.StoreAppsInfrastructureResourceMapId); var error = string.Format(CultureInfo.CurrentCulture, resourceLoader.GetString("FrameNavigationServiceUnableResolveMessage"), pageToken); throw new ArgumentException(error, "pageToken"); } // Get the page type and parameter of the last navigation to check if we // are trying to navigate to the exact same page that we are currently on var lastNavigationParameter = _sessionStateService.SessionState.ContainsKey(LastNavigationParameterKey) ? _sessionStateService.SessionState[LastNavigationParameterKey] : null; var lastPageTypeFullName = _sessionStateService.SessionState.ContainsKey(LastNavigationPageKey) ? _sessionStateService.SessionState[LastNavigationPageKey] as string : string.Empty; if (lastPageTypeFullName != pageType.FullName || !AreEquals(lastNavigationParameter, parameter)) { return(_frame.Navigate(pageType, parameter)); } return(false); }
/// <summary> /// Navigates to the page. /// </summary> /// <param name="sourcePageType">The page type</param> /// <returns></returns> public async Task NavigateAsync(Type sourcePageType) { await PerformNavigationAsync(() => frameFacade.Navigate(sourcePageType)); }