protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); AppViewModel = e?.Parameter as AppLevelModel; AppViewModel.MessageToDisplay += AppViewModel_MessageToDisplay; AppViewModel.NavigateBack -= NavigateBack; AppViewModel.NavigateBack += NavigateBack; AppViewModel.NavigateTo += (page, viewModel, command, reentry) => { if (reentry || viewModel != AppViewModel?.ChildViewmodel) { viewModel.OnNavigatingTo(); MainPaneFrame.Navigate(page, viewModel); AppViewModel.VisitedPages.Push(viewModel); AppViewModel.ChildViewmodel = viewModel; AppViewModel.CanGoBack = !viewModel.IsInitialAppPage; ContentSplitView.IsPaneOpen = false; command?.Execute(); } }; }
private async void NavigationHelper(MenuItem <AppLevelModel> item, int currentIndex) { if (item.UseBackButton) { await TryNavagatingBack(); } else { if (item.Reentry || item.ViewModel != AppViewModel?.ChildViewmodel) { bool canNavigate; if (AppViewModel.VisitedPages.Count == 0) { // No page to navigate away from canNavigate = true; } else { // Allow page to perform any cleanup if necessary. var currentPage = AppViewModel.VisitedPages.Peek(); canNavigate = await currentPage.OnNavigatingFrom(); } if (canNavigate) { item.BeforeNavigatingCommand?.Execute(); MainPaneFrame.Navigate(item.Page, item.ViewModel); AppViewModel.VisitedPages.Push(item.ViewModel); AppViewModel.ChildViewmodel = item.ViewModel; AppViewModel.CanGoBack = !item.ViewModel.IsInitialAppPage; item.AfterNavigatingCommand?.Execute(); } } } }