public async Task<bool> SaveViewModelAsync()
{
if (IsClosing || IsClosed)
{
return false;
}
IsSaving = true;
if (DeferValidationUntilFirstSaveCall)
{
DeferValidationUntilFirstSaveCall = false;
}
// Force validation before saving
if (!ValidateViewModel(true, false))
{
IsSaving = false;
return false;
}
var eventArgs = new SavingEventArgs();
Saving.SafeInvoke(this, eventArgs);
await SavingAsync.SafeInvokeAsync(this, eventArgs);
if (eventArgs.Cancel)
{
IsSaving = false;
Log.Info("Saving of view model '{0}' is canceled via the Saving event", GetType());
return false;
}
var saved = await SaveAsync();
Log.Info(saved ? "Saved view model '{0}'" : "Failed to save view model '{0}'", GetType());
if (saved)
{
lock (_modelLock)
{
foreach (KeyValuePair<string, object> modelKeyValuePair in _modelObjects)
{
UninitializeModelInternal(modelKeyValuePair.Key, modelKeyValuePair.Value, ModelCleanUpMode.EndEdit);
}
}
Saved.SafeInvoke(this);
await SavedAsync.SafeInvokeAsync(this);
}
IsSaving = false;
return saved;
}