Catel.MVVM.ViewModelBase.SaveViewModelAsync C# (CSharp) Method

SaveViewModelAsync() public method

Saves the data.
public SaveViewModelAsync ( ) : Task
return Task
        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;
        }