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