山本 さん、情報有り難うございます。
一つ目の Answer だと以下のようになります。
partial void EditableBsGrid_Closing(ref bool cancel)
{
var blocker = Blockers.AddNew();
var result = this.ShowMessageBox("close?", "close", MessageBoxOption.OkCancel);
if (result == System.Windows.MessageBoxResult.OK)
{
blocker.Details.DiscardChanges();
}
else
{
blocker.Details.DiscardChanges();
cancel = true;
}
}
余計な混乱を招きそうです。
2つ目の Answer では以下のようになります。
private bool isExplicitClose = false;
partial void EditableBsGrid_Closing(ref bool cancel)
{
if (!isExplicitClose && !this.DataWorkspace.ApplicationData.Details.HasChanges)
{
cancel = true;
Dispatchers.Current.BeginInvoke(ShowAreYouSureDialog);
}
else
{ }
}
private void ShowAreYouSureDialog()
{
Debug.Assert(!this.DataWorkspace.ApplicationData.Details.HasChanges);
var result = this.ShowMessageBox("close?", "close", MessageBoxOption.OkCancel);
if (result == System.Windows.MessageBoxResult.OK)
{
isExplicitClose = true;
Close(false);
isExplicitClose = false;
}
}
これ以上何も出ません。
これは未編集時のダイアログですが、
何かしらの編集が行われていたら、「破棄しますか?」と聞いてくるダイアログが出ます。
こっちがすっきり。