public async Task <bool> NavigateAsync(Type page, object parameter = null, NavigationTransitionInfo infoOverride = null) { DebugWrite($"Page: {page}, Parameter: {parameter}, NavigationTransitionInfo: {infoOverride}"); if (page == null) { throw new ArgumentNullException(nameof(page)); } // use CurrentPageType/Param instead of LastNavigationType/Parameter to avoid new navigation to the current // page in some race conditions. if ((page.FullName == CurrentPageType?.FullName) && (parameter == CurrentPageParam)) { return(false); } if ((page.FullName == CurrentPageType?.FullName) && (parameter?.Equals(CurrentPageParam) ?? false)) { return(false); } parameter = SerializationService.Serialize(parameter); await Task.CompletedTask; return(FrameFacadeInternal.Navigate(page, parameter, infoOverride)); }
public async Task <bool> NavigateAsync(Type page, object parameter = null, NavigationTransitionInfo infoOverride = null) { DebugWrite($"Page: {page}, Parameter: {parameter}, NavigationTransitionInfo: {infoOverride}"); if (page == null) { throw new ArgumentNullException(nameof(page)); } if ((page.FullName == LastNavigationType) && (parameter == LastNavigationParameter)) { return(false); } if ((page.FullName == LastNavigationType) && (parameter?.Equals(LastNavigationParameter) ?? false)) { return(false); } parameter = SerializationService.Serialize(parameter); await Task.CompletedTask; return(FrameFacadeInternal.Navigate(page, parameter, infoOverride)); }
/* * Navigate<T> allows developers to navigate using a * page key instead of the view type. This is accomplished by * creating a custom Enum and setting up the PageKeys dict * with the Key/Type pairs for your views. The dict is * shared by all NavigationServices and is stored in * the BootStrapper (or Application) of the app. * * Implementation example: * * // define your Enum * public Enum Pages { MainPage, DetailPage } * * // setup the keys dict * var keys = BootStrapper.PageKeys<Views>(); * keys.Add(Pages.MainPage, typeof(Views.MainPage)); * keys.Add(Pages.DetailPage, typeof(Views.DetailPage)); * * // use Navigate<T>() * NavigationService.Navigate(Pages.MainPage); */ // T must be the same custom Enum used with BootStrapper.PageKeys() public bool Navigate <T>(T key, object parameter = null, NavigationTransitionInfo infoOverride = null) where T : struct, IConvertible { DebugWrite($"Key: {key}, Parameter: {parameter}, NavigationTransitionInfo: {infoOverride}"); var keys = BootStrapper.Current.PageKeys <T>(); if (!keys.ContainsKey(key)) { throw new KeyNotFoundException(key.ToString()); } var page = keys[key]; if (page.FullName.Equals(LastNavigationType)) { if (parameter == LastNavigationParameter) { return(false); } if (parameter != null && parameter.Equals(LastNavigationParameter)) { return(false); } } parameter = SerializationService.Serialize(parameter); return(FrameFacadeInternal.Navigate(page, parameter, infoOverride)); }
public async Task <bool> NavigateAsync(Type page, object parameter = null, IDictionary <string, object> state = null, NavigationTransitionInfo infoOverride = null) { DebugWrite($"Page: {page}, Parameter: {parameter}, NavigationTransitionInfo: {infoOverride}"); if (page == null) { throw new ArgumentNullException(nameof(page)); } // use CurrentPageType/Param instead of LastNavigationType/Parameter to avoid new navigation to the current // page in some race conditions. if ((page.FullName == CurrentPageType?.FullName) && (parameter == CurrentPageParam)) { return(false); } if ((page.FullName == CurrentPageType?.FullName) && (parameter?.Equals(CurrentPageParam) ?? false)) { return(false); } if (state != null) { var pageState = FrameFacadeInternal.PageStateSettingsService(page, 1, parameter).Values; foreach (var item in state) { pageState[item.Key] = item.Value; } } //var frameContent = FrameFacadeInternal.Frame.Content; //if (frameContent is Page current && frameContent is IDisposable disposable && page.FullName == CurrentPageType?.FullName) //{ // if (current.DataContext is INavigable dataContext) // { // await NavigatingFromAsync(current, page, parameter, dataContext, false, NavigationMode.Refresh); // await NavigateFromAsync(current, dataContext, false); // } // await NavigateToAsync(NavigationMode.Refresh, parameter, current); // FrameFacade.CurrentPageParam = parameter; // FrameFacade.Frame.BackStack.Add(new PageStackEntry(page, SerializationService.Serialize(CurrentPageParam), infoOverride)); // return true; //} parameter = SerializationService.Serialize(parameter); return(FrameFacadeInternal.Navigate(page, parameter, infoOverride)); }
public async Task <bool> NavigateAsync(Type page, object parameter = null, NavigationTransitionInfo infoOverride = null) { DebugWrite($"Page: {page}, Parameter: {parameter}, NavigationTransitionInfo: {infoOverride}"); // serialize parameter var serializedParameter = default(string); try { serializedParameter = Settings.SerializationStrategy.Serialize(parameter); } catch { throw new Exception("Parameter cannot be serialized. See https://github.com/Windows-XAML/Template10/wiki/Page-Parameters"); } return(await NavigationOrchestratorAsync(page, parameter, NavigationMode.New, () => { return FrameFacadeInternal.Navigate(page, serializedParameter, infoOverride); })); }
public bool Navigate(Type page, object parameter = null, NavigationTransitionInfo infoOverride = null) { DebugWrite($"Page: {page}, Parameter: {parameter}, NavigationTransitionInfo: {infoOverride}"); if (page == null) { throw new ArgumentNullException(nameof(page)); } if (page.FullName.Equals(LastNavigationType)) { if (parameter == LastNavigationParameter) { return(false); } if (parameter != null && parameter.Equals(LastNavigationParameter)) { return(false); } } parameter = SerializationService.Serialize(parameter); return(FrameFacadeInternal.Navigate(page, parameter, infoOverride)); }