protected static async Task <bool> ShowModalViewModelAsync(BaseViewModel viewModel, BaseViewModel parentViewModel, bool mainViewModel = false)
        {
            if (string.IsNullOrWhiteSpace(viewModel.ViewModelGuid))
            {
                viewModel.ViewModelGuid = Guid.NewGuid().ToString();
            }

            var tcs = new TaskCompletionSource <bool>();

            if (!mainViewModel)
            {
                ViewModelDataCollection.Push(viewModel.ViewModelGuid, TCS_VALUE, tcs);
            }

            bool result    = false;
            var  presenter = Resolver.Resolve <IPresenterManager>();

            if (presenter != null)
            {
                result = await presenter.TryDisplayViewAsync(viewModel, parentViewModel);
            }

            if (mainViewModel && result)
            {
                tcs.SetResult(true);
            }
            else if (!result) //Not awaiting because view is not display
            {
                tcs.SetResult(false);
            }

            return(await tcs.Task);
        }
        /// <summary>
        /// Call when view linked to viewmodel closed
        /// Here fo Unregister event message
        /// </summary>
        protected virtual void Closed(bool backPressed)
        {
            _viewModelClosed = true;

            //It's for this view Model
            var tcsShowingViewModel = ViewModelDataCollection.Get <TaskCompletionSource <bool> >(_viewModelGuid, TCS_VALUE);

            if (tcsShowingViewModel != null)
            {
                tcsShowingViewModel.TrySetResult(!backPressed);
            }

            if (_autoClearViewModelDataCollection)
            {
                ViewModelDataCollection.Clear(_viewModelGuid);
            }

            AppMessenger.AppInstance.Unregister <MvxMessageViewModelEvent>(this);
        }