public Page PresentAsNavigatableMainPage <TViewModel>(ref TViewModel viewModel) where TViewModel : BaseViewModel { viewModel = _viewLocator.GetViewModel <TViewModel>(); var page = _viewLocator.CreateAndBindPageFor(viewModel); NavigationPage newNavigationPage = new NavigationPage(page); IEnumerable <BaseViewModel> viewModelsToDismiss = FindViewModelsToDismiss(_presentationRoot.MainPage); if (_presentationRoot.MainPage is NavigationPage navPage) { navPage.PopRequested -= NavPagePopRequested; } viewModel.BeforeFirstShown(); // Listen for back button presses on the new navigation bar newNavigationPage.PopRequested += NavPagePopRequested; _presentationRoot.MainPage = newNavigationPage; foreach (BaseViewModel toDismiss in viewModelsToDismiss) { toDismiss.AfterDismissed(); } return(newNavigationPage); }