public static void CheckChangesToClose(this ChildWindow child, System.ComponentModel.CancelEventArgs e) { var vmBase = child.DataContext as ViewModel; if (vmBase != null && vmBase.HasChanges) { SaveConfirmation saveConfirmation = new SaveConfirmation(); saveConfirmation.Show(); saveConfirmation.Closed += (s, t) => { ChildWindow w = (ChildWindow)s; if (w.DialogResult.HasValue && w.DialogResult.Value) { child.DialogResult = false; vmBase.CancelChanges(); } }; if (e != null) e.Cancel = true; } else child.DialogResult = false; }
/// <summary> /// On tabitem clicked to close, check if it has changes to display a warning message /// </summary> /// <param name="sender">ClosableTabItem type</param> /// <param name="e">The parameter is not used.</param> void tabItem_CloseClicked(object sender, EventArgs e) { ViewModel vmBase; _closingTabItem = sender as ClosableTabItem; FrameworkElement fe = _closingTabItem.Content as FrameworkElement; Type contextType = fe.DataContext.GetType(); vmBase = fe.DataContext as ViewModel; if (vmBase != null && vmBase.HasChanges) { SaveConfirmation saveConfirmation = new SaveConfirmation(); saveConfirmation.Show(); saveConfirmation.Closed += (s, t) => { ChildWindow w = (ChildWindow)s; if (w.DialogResult.HasValue && w.DialogResult.Value) { RemoveTabItem(); } }; } else RemoveTabItem(); }