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);
        }