void NavigateTo(NavigationMode mode, object parameter) { LastNavigationParameter = parameter; LastNavigationType = FrameFacade.Content.GetType().FullName; if (mode == NavigationMode.New) { FrameFacade.ClearFrameState(); } var page = FrameFacade.Content as Page; if (page != null) { if (page.DataContext == null) { // to support dependency injection, but keeping it optional. var viewmodel = BootStrapper.Current.ResolveForPage(page.GetType(), this); if (viewmodel != null) { page.DataContext = viewmodel; } } // call viewmodel 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); } } }
void NavigateTo(NavigationMode mode, object parameter) { LastNavigationParameter = parameter; LastNavigationType = FrameFacade.Content.GetType().FullName; if (mode == NavigationMode.New) { FrameFacade.ClearFrameState(); } var page = FrameFacade.Content as Page; if (page != null) { // call viewmodel var dataContext = page.DataContext as INavigable; if (dataContext != null) { if (dataContext.Identifier != null && (mode == NavigationMode.Forward || mode == NavigationMode.Back)) { // don't call load if cached && navigating back/forward return; } else { // prepare for state load dataContext.NavigationService = this; var pageState = FrameFacade.PageStateContainer(page.GetType()); dataContext.OnNavigatedTo(parameter, mode, pageState); } } } }
void NavigateTo(NavigationMode mode, object parameter, object frameContent = null) { DebugWrite($"Mode: {mode}, Parameter: {parameter} FrameContent: {frameContent}"); frameContent = frameContent ?? Frame.Content; LastNavigationParameter = parameter; LastNavigationType = frameContent.GetType().FullName; if (mode == NavigationMode.New) { FrameFacade.ClearFrameState(); } var page = frameContent as Page; if (page != null) { if (page.DataContext == null) { // to support dependency injection, but keeping it optional. var viewmodel = BootStrapper.Current.ResolveForPage(page.GetType(), this); if (viewmodel != null) { page.DataContext = viewmodel; } } // call viewmodel var dataContext = page.DataContext as INavigable; if (dataContext != null) { // prepare for state load dataContext.NavigationService = this; dataContext.Dispatcher = Common.WindowWrapper.Current(this)?.Dispatcher; dataContext.SessionState = BootStrapper.Current.SessionState; var pageState = FrameFacade.PageStateSettingsService(page.GetType()).Values; dataContext.OnNavigatedTo(parameter, mode, pageState); } } }