예제 #1
0
        /// <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));
        }
예제 #2
0
        //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));
        }
예제 #3
0
        /// <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)));
        }