public async Task NavigateMenuItemAsync <TViewModelMasterDetail>(Model.MasterDetail.MenuItem selectedMenuItem, NavigationParameters parameters = null) where TViewModelMasterDetail : BaseViewModel
 {
     await InternalNavigateMenuItemAsync(typeof(TViewModelMasterDetail), selectedMenuItem, parameters);
 }
        private async Task InternalNavigateMenuItemAsync(Type viewModelMasterDetailType, Model.MasterDetail.MenuItem selectedMenuItem, NavigationParameters parameters = null)
        {
            try
            {
                Page page = await CreateAndBindPage(selectedMenuItem.ViewModelType, parameters);

                if (CurrentApplication.MainPage is MasterDetailPage currentPage)
                {
                    currentPage.Detail      = new NavigationPage(page);
                    currentPage.IsPresented = false;
                }
                else
                {
                    MasterDetailPage masterDetailPage = await CreateAndBindMasterDetailPage(viewModelMasterDetailType, selectedMenuItem.ViewModelType, parameters);

                    CurrentApplication.MainPage = masterDetailPage;
                    if (CurrentApplication.MainPage is MasterDetailPage masterPage)
                    {
                        masterPage.IsPresented = false;
                    }
                }
            }
            catch (Exception ex)
            {
                ex.LogException();
            }
        }