/// <summary> /// Reverts the page. /// </summary> private async void RevertButton_Click(object sender, RoutedEventArgs e) { var saveDialog = new SaveChangesDialog() { Title = $"Save changes to Invoice # {ViewModel.InvoiceNumber.ToString()}?", Message = $"Invoice # {ViewModel.InvoiceNumber.ToString()} " + "has unsaved changes that will be lost. Do you want to save your changes?" }; await saveDialog.ShowAsync(); SaveChangesDialogResult result = saveDialog.Result; switch (result) { case SaveChangesDialogResult.Save: await ViewModel.SaveOrder(); ViewModel = await OrderDetailPageViewModel.CreateFromGuid(ViewModel.Id); break; case SaveChangesDialogResult.DontSave: ViewModel = await OrderDetailPageViewModel.CreateFromGuid(ViewModel.Id); break; case SaveChangesDialogResult.Cancel: break; } }
/// <summary> /// Check whether there are unsaved changes and warn the user. /// </summary> protected async override void OnNavigatingFrom(NavigatingCancelEventArgs e) { if (ViewModel.IsModified) { // Cancel the navigation immediately, otherwise it will continue at the await call. e.Cancel = true; void resumeNavigation() { if (e.NavigationMode == NavigationMode.Back) { Frame.GoBack(); } else { Frame.Navigate(e.SourcePageType, e.Parameter, e.NavigationTransitionInfo); } } var saveDialog = new SaveChangesDialog() { Title = $"Save changes?" }; await saveDialog.ShowAsync(); SaveChangesDialogResult result = saveDialog.Result; switch (result) { case SaveChangesDialogResult.Save: await ViewModel.SaveAsync(); resumeNavigation(); break; case SaveChangesDialogResult.DontSave: await ViewModel.RevertChangesAsync(); resumeNavigation(); break; case SaveChangesDialogResult.Cancel: break; } } base.OnNavigatingFrom(e); }
/// <summary> /// Check whether there are unsaved changes and warn the user. /// </summary> protected async override void OnNavigatingFrom(NavigatingCancelEventArgs e) { if (ViewModel.HasChanges) { var saveDialog = new SaveChangesDialog() { Title = $"Save changes to Invoice # {ViewModel.InvoiceNumber.ToString()}?", Message = $"Invoice # {ViewModel.InvoiceNumber.ToString()} " + "has unsaved changes that will be lost. Do you want to save your changes?" }; await saveDialog.ShowAsync(); SaveChangesDialogResult result = saveDialog.Result; switch (result) { case SaveChangesDialogResult.Save: await ViewModel.SaveOrder(); break; case SaveChangesDialogResult.DontSave: break; case SaveChangesDialogResult.Cancel: if (e.NavigationMode == NavigationMode.Back) { Frame.GoForward(); } else { Frame.GoBack(); } e.Cancel = true; // This flag gets cleared on navigation, so restore it. ViewModel.HasChanges = true; break; } } base.OnNavigatingFrom(e); }