/// <summary> /// Откатить изменения объекта. /// </summary> public void RejectChanges() { if (ProcessesInWork.Contains(nameof(RejectChanges))) { return; } ProcessesInWork.Add(nameof(RejectChanges)); //устанавливаем в каждое измененное свойство начальное значение. foreach (var originalValue in _originalValues) { Model.GetType().GetProperty(originalValue.Key).SetValue(Model, originalValue.Value); //reject in Model var originalValueInWrapper = this.GetType().GetProperty(originalValue.Key + "OriginalValue").GetValue(this); //reject in Wrapper this.GetType().GetProperty(originalValue.Key).SetValue(this, originalValueInWrapper); } //очищаем список начальных значений _originalValues.Clear(); //откатываем изменения в сложных свойствах. _trackingObjects.Where(x => !x.ProcessesInWork.Contains(nameof(RejectChanges))) .ToList().ForEach(x => x.RejectChanges()); //проверка на валидность объекта. Validate(); //обновляем в WPF весь объект целиком. OnPropertyChanged(this, ""); ProcessesInWork.Remove(nameof(RejectChanges)); }
//public bool IsValid => !HasErrors && _trackingObjects.All(x => x.IsValid); /// <summary> /// Принять изменения объекта. /// </summary> public void AcceptChanges() { if (ProcessesInWork.Contains(nameof(AcceptChanges))) { return; } ProcessesInWork.Add(nameof(AcceptChanges)); //очищаем список начальных значений _originalValues.Clear(); //принимаем изменения в сложных свойствах. _trackingObjects.Where(x => !x.ProcessesInWork.Contains(nameof(AcceptChanges))) .ToList().ForEach(x => x.AcceptChanges()); //обновляем в WPF весь объект целиком. OnPropertyChanged(this, ""); ProcessesInWork.Remove(nameof(AcceptChanges)); }
/// <summary> /// Принять все изменения в коллекции /// </summary> public void AcceptChanges() { if (ProcessesInWork.Contains(nameof(AcceptChanges))) { return; } ProcessesInWork.Add(nameof(AcceptChanges)); _addedItems.Clear(); _modifiedItems.Clear(); _removedItems.Clear(); this.Where(x => !x.ProcessesInWork.Contains(nameof(AcceptChanges))).ToList().ForEach(x => x.AcceptChanges()); _originalCollection = this.ToList(); ProcessesInWork.Remove(nameof(AcceptChanges)); OnPropertyChanged(new PropertyChangedEventArgs(nameof(IsChanged))); }