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