private void OnDialogCloseRequested(object sender, DialogCloseRequestedEventArgs e) { IDialogRequestClose viewModel = sender as IDialogRequestClose; IDialog dialog = instances[viewModel]; viewModel.CloseRequested -= OnDialogCloseRequested; if (e.DialogResult.HasValue) { dialog.DialogResult = e.DialogResult; } else { dialog.Close(); } }
public void Instantiate <TViewModel>(TViewModel viewModel) where TViewModel : IDialogRequestClose { if (instances.Select(i => i.Key.GetType()).Contains(viewModel.GetType())) { IDialogRequestClose oldViewModel = instances.SingleOrDefault(i => i.Key.GetType() == viewModel.GetType()).Key; oldViewModel.CloseRequested -= OnDialogCloseRequested; instances.Remove(oldViewModel); } if (!Mappings.ContainsKey(typeof(TViewModel))) { throw new NotRegisteredViewModelException(); } Type viewType = Mappings[typeof(TViewModel)]; IDialog dialog = (IDialog)Activator.CreateInstance(viewType); dialog.DataContext = viewModel; dialog.Owner = owner; viewModel.CloseRequested += OnDialogCloseRequested; instances.Add(viewModel, dialog); }