public async Task SaveNavigationAsync() { DebugWrite($"Frame: {FrameFacadeInternal.FrameId}"); if (CurrentPageType == null) { return; } var args = new CancelEventArgs <Type>(FrameFacadeInternal.CurrentPageType); BeforeSavingNavigation?.Invoke(this, args); if (args.Cancel) { return; } var state = FrameFacadeInternal.PageStateSettingsService(GetType().ToString()); if (state == null) { throw new InvalidOperationException("State container is unexpectedly null"); } state.Write <string>("CurrentPageType", CurrentPageType.ToString()); state.Write <object>("CurrentPageParam", CurrentPageParam); state.Write <string>("NavigateState", FrameFacadeInternal?.GetNavigationState()); await Task.CompletedTask; }
public void SaveNavigation() { var state = State(GetType()); state["CurrentPageType"] = CurrentPageType.ToString(); state["CurrentPageParam"] = CurrentPageParam; state["NavigateState"] = _frame.GetNavigationState(); }
public void SaveNavigation() { var state = FrameFacade.PageStateContainer(GetType()); if (state == null) { throw new InvalidOperationException("State container is unexpectedly null"); } state["CurrentPageType"] = CurrentPageType?.ToString(); state["CurrentPageParam"] = CurrentPageParam; state["NavigateState"] = FrameFacade?.GetNavigationState(); }
public void SaveNavigation() { var state = FrameFacade.PageStateContainer(GetType()); if (state == null) { throw new InvalidOperationException("State container is unexpectedly null"); } state["CurrentPageType"] = CurrentPageType.ToString(); try { state["CurrentPageParam"] = CurrentPageParam; } catch { throw new Exception("Failed to serialize page parameter, override/implement ToString()"); } state["NavigateState"] = FrameFacade?.GetNavigationState(); }
/// <summary> /// Save the navigation state. /// </summary> public void SaveNavigation() { // it is possible to close the application before we have navigated and created state if (CurrentPageType == null) { return; } var state = FrameFacade.GetPageStateContainer(GetType()); if (state == null) { throw new InvalidOperationException("State container is unexpectedly null"); } state[CURRENT_PAGE_TYPE_KEY] = CurrentPageType.ToString(); try { state[CURRENT_PAGE_PARAM_KEY] = CurrentPageParam; } catch { throw new Exception("Failed to serialize page parameter, override/implement ToString()"); } state[NAVIGATE_STATE_KEY] = FrameFacade?.GetNavigationState(); }
private async Task <bool> NavigationOrchestratorAsync(Type page, object parameter, NavigationMode mode, Func <bool> navigate) { DebugWrite($"Page: {page}, Parameter: {parameter}, NavigationMode: {mode}"); if (page == null) { throw new ArgumentNullException(nameof(page)); } if (navigate == null) { throw new ArgumentNullException(nameof(navigate)); } // this cannot be used for duplicate navigation, except for refresh if ((mode != NavigationMode.Refresh) && (page.FullName == CurrentPageType?.GetType().FullName) && (parameter?.Equals(CurrentPageParam) ?? false)) { return(false); } // fetch current (which will become old) var oldPage = FrameFacade.Content as Page; var oldViewModel = oldPage?.DataContext; // call oldViewModel.OnNavigatingFromAsync() var viewmodelCancels = await Navigation.NavingFromCancelsAsync(oldViewModel, oldPage, CurrentPageParam, false, mode, page, parameter); if (viewmodelCancels) { return(false); } // raise Navigating event var eventCancels = RaiseNavigatingCancels(oldPage, parameter, false, mode.ToTemplate10NavigationMode(), page); if (eventCancels) { return(false); } // invoke navigate (however custom) if (navigate.Invoke()) { CurrentPageParam = parameter; CurrentPageType = page; } else { return(false); } // fetch (current which is now new) var newPage = FrameFacade.Content as Page; var newViewModel = newPage?.DataContext; // raise Navigated event RaiseNavigated(newPage, parameter, mode.ToTemplate10NavigationMode()); // call oldViewModel.OnNavigatedFrom() await Navigation.NavedFromAsync(oldViewModel, oldPage, false); // call newViewModel.ResolveForPage() if (newViewModel == null) { newPage.DataContext = BootStrapper.Current.ResolveForPage(newPage, this); } // call newTemplate10ViewModel.Properties if (newViewModel is ITemplate10ViewModel) { Navigation.SetupViewModel(this, newViewModel as ITemplate10ViewModel); } // call newViewModel.OnNavigatedToAsync() await Navigation.NavedToAsync(newViewModel, parameter, mode, newPage); // finally return(true); }