public async Task<bool> CancelViewModelAsync()
{
if (IsClosing || IsClosed)
{
return false;
}
IsCanceling = true;
var eventArgs = new CancelingEventArgs();
Canceling.SafeInvoke(this, eventArgs);
await CancelingAsync.SafeInvokeAsync(this, eventArgs);
if (eventArgs.Cancel)
{
Log.Info("Canceling of view model '{0}' is canceled via the Canceling event", GetType());
IsCanceling = false;
return false;
}
var cancel = await CancelAsync();
Log.Info(cancel ? "Canceled view model '{0}'" : "Failed to cancel view model '{0}'", GetType());
if (!cancel)
{
IsCanceling = false;
return false;
}
lock (_modelLock)
{
foreach (var modelKeyValuePair in _modelObjects)
{
UninitializeModelInternal(modelKeyValuePair.Key, modelKeyValuePair.Value, ModelCleanUpMode.CancelEdit);
}
}
Log.Info("Canceled view model '{0}'", GetType());
Canceled.SafeInvoke(this);
await CanceledAsync.SafeInvokeAsync(this);
IsCanceling = false;
return true;
}