private async Task NavigateAsync <TViewModel>(bool isModal, object parameter) where TViewModel : PageViewModel { var view = ViewResolver.ResolveView <TViewModel>(); if (view == null) { //Logger.Information("Skipping navigation to view model {ViewModelName}", typeof(TViewModel).Name); return; } var viewModel = Ioc.Resolve <TViewModel>(); view.BindingContext = viewModel; view.Appearing += async delegate { viewModel.OnAppearing(); await viewModel.OnAppearingAsync(); }; view.Disappearing += async delegate { viewModel.OnDisappearing(); await viewModel.OnDisappearingAsync(); }; if (isModal) { await Navigation.PushModalAsync(view); } else { if (Navigation.NavigationStack.Last().GetType().Name == view.GetType().Name) { // Already on the requested page. return; } await Navigation.PushAsync(view); } viewModel.OnNavigatedTo(parameter); await viewModel.OnNavigatedToAsync(parameter); }
public async Task NavigateToDetailViewModelAsync <TViewModel>(object parameter = null) where TViewModel : PageViewModel { //Logger.Track("NavigateToDetailViewModel", new Dictionary<string, string> { { "Page", typeof(TViewModel).Name } }); var view = ViewResolver.ResolveView <TViewModel>(); if (view == null) { //Logger.Information("Skipping navigation to view model {ViewModelName}", typeof(TViewModel).Name); return; } var viewModel = Ioc.Resolve <TViewModel>(); view.BindingContext = viewModel; var message = new ShowDetailPageMessage(view); MessageBus.Publish(message); viewModel.OnNavigatedTo(parameter); await viewModel.OnNavigatedToAsync(parameter); }