diff --git a/CHANGELOG.md b/CHANGELOG.md index 30de4d98..2dd15a42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ This project adheres to [Semantic Versioning](http://semver.org/) and is followi NOTE: Features with breaking changes are found on branch [releases/v8](https://github.com/FantasticFiasco/mvvm-dialogs/tree/releases/v8) and will stay there until a new major version is released. Until then the features have been published to [www.nuget.org](https://www.nuget.org/packages/MvvmDialogs/) as pre-releases to v8. +### :syringe: Changed + +- [#116](https://github.com/FantasticFiasco/mvvm-dialogs/issues/116) [BREAKING CHANGE] `IDialogService.Close` returns `false` instead of throwing an exception when failing to close a dialog. This behavior aligns with the behavior of `IDialogService.Activate`. + ## 7.1.0 - 2020-06-07 ### :zap: Added diff --git a/src/net/DialogService.cs b/src/net/DialogService.cs index e658a417..128cfaf2 100644 --- a/src/net/DialogService.cs +++ b/src/net/DialogService.cs @@ -162,25 +162,30 @@ public bool Activate(INotifyPropertyChanged viewModel) } /// - public void Close(INotifyPropertyChanged viewModel) + public bool Close(INotifyPropertyChanged viewModel) { if (viewModel == null) throw new ArgumentNullException(nameof(viewModel)); foreach (Window? window in Application.Current.Windows) { - if (window == null) + if (window == null || !viewModel.Equals(window.DataContext)) { continue; } - if (viewModel.Equals(window.DataContext)) + try { window.Close(); - return; + return true; + } + catch (Exception e) + { + Logger.Write($"Failed to close dialog: {e}"); + break; } } - throw new DialogNotFoundException(); + return false; } /// diff --git a/src/net/IDialogService.cs b/src/net/IDialogService.cs index b802b263..de200cf1 100644 --- a/src/net/IDialogService.cs +++ b/src/net/IDialogService.cs @@ -134,10 +134,10 @@ void Show( /// or . /// /// The view model of the dialog to close. - /// - /// No dialog is found with specified view model as data context. - /// - void Close(INotifyPropertyChanged viewModel); + /// + /// true if the was successfully closed; otherwise, false. + /// + bool Close(INotifyPropertyChanged viewModel); /// /// Displays a message box that has a message, title bar caption, button, and icon; and