public NavigationService(Frame frame) { FrameFacade = new FrameFacade(frame); FrameFacade.Navigating += async (s, e) => { if (e.Suspending) return; // allow the viewmodel to cancel navigation e.Cancel = !NavigatingFrom(false); if (!e.Cancel) { await NavigateFromAsync(false); } }; FrameFacade.Navigated += (s, e) => { NavigateTo(e.NavigationMode, e.Parameter); }; }
public NavigationService(Frame frame) { FrameFacade = new FrameFacade(frame); FrameFacade.Navigating += async(s, e) => { if (e.Suspending) { return; } // allow the viewmodel to cancel navigation e.Cancel = !NavigatingFrom(false); if (!e.Cancel) { await NavigateFromAsync(false); } }; FrameFacade.Navigated += (s, e) => { NavigateTo(e.NavigationMode, e.Parameter); }; }
public void SaveNavigation() { if (CurrentPageType == null) { return; } 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(); }
void NavigateTo(NavigationMode mode, object parameter) { LastNavigationParameter = parameter; LastNavigationType = FrameFacade.Content.GetType().FullName; if (mode == NavigationMode.New) { // TODOAzureSample: clear existing state } var page = FrameFacade.Content as FrameworkElement; if (page != null) { var dataContext = page.DataContext as INavigable; if (dataContext != null) { // prepare for state load dataContext.NavigationService = this; var pageState = FrameFacade.PageStateContainer(page.GetType()); dataContext.OnNavigatedTo(parameter, mode, pageState); } } }