private void Flush() { if (this.IsFlushPending) { this.IsFlushPending = false; StopTimer(); var changePropertyRevertibleCommand = new ChangePropertyRevertibleCommand(_instance, _propertyInfo, LastUpdatedValue, OldValueToFlush, CommandDescription); _undoRedoService.AddExecutedCommand(changePropertyRevertibleCommand); } }
private void CreateRevertibleCommandFromCollectionChange(NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs) { switch (notifyCollectionChangedEventArgs.Action) { case NotifyCollectionChangedAction.Add: { _undoRedoService.AddExecutedCommand(new RevertibleCommand( () => { var insertionIndex = notifyCollectionChangedEventArgs.NewStartingIndex; foreach (var newItem in notifyCollectionChangedEventArgs.NewItems) { _objAsIList.Insert(insertionIndex++, newItem); } }, () => { foreach (var newItem in notifyCollectionChangedEventArgs.NewItems) { _objAsIList.RemoveAt(notifyCollectionChangedEventArgs.NewStartingIndex); } })); break; } case NotifyCollectionChangedAction.Move: { _undoRedoService.AddExecutedCommand(new RevertibleCommand( () => { var oldStartingIndex = notifyCollectionChangedEventArgs.OldStartingIndex; foreach (var item in notifyCollectionChangedEventArgs.OldItems) { _objAsIList.RemoveAt(oldStartingIndex++); } var newStartingIndex = notifyCollectionChangedEventArgs.NewStartingIndex; foreach (var item in notifyCollectionChangedEventArgs.NewItems) { _objAsIList.Insert(newStartingIndex++, item); } }, () => { var newStartingIndex = notifyCollectionChangedEventArgs.NewStartingIndex; foreach (var item in notifyCollectionChangedEventArgs.NewItems) { _objAsIList.RemoveAt(newStartingIndex++); } var oldStartingIndex = notifyCollectionChangedEventArgs.OldStartingIndex; foreach (var item in notifyCollectionChangedEventArgs.OldItems) { _objAsIList.Insert(oldStartingIndex++, item); } })); break; } case NotifyCollectionChangedAction.Remove: { _undoRedoService.AddExecutedCommand(new RevertibleCommand( () => { foreach (var removedItem in notifyCollectionChangedEventArgs.OldItems) { _objAsIList.RemoveAt(notifyCollectionChangedEventArgs.OldStartingIndex); } }, () => { var insertionIndex = notifyCollectionChangedEventArgs.OldStartingIndex; foreach (var removedItem in notifyCollectionChangedEventArgs.OldItems) { _objAsIList.Insert(insertionIndex++, removedItem); } })); break; } case NotifyCollectionChangedAction.Replace: { _undoRedoService.AddExecutedCommand(new RevertibleCommand( () => { var index = notifyCollectionChangedEventArgs.NewStartingIndex; foreach (var replacedItem in notifyCollectionChangedEventArgs.NewItems) { _objAsIList[index++] = replacedItem; } }, () => { var index = notifyCollectionChangedEventArgs.OldStartingIndex; foreach (var previousItem in notifyCollectionChangedEventArgs.OldItems) { _objAsIList[index++] = previousItem; } })); break; } case NotifyCollectionChangedAction.Reset: { var removedItems = _recordedElementItems.Select((element) => element.OldValue).ToArray(); _undoRedoService.AddExecutedCommand(new RevertibleCommand( () => { _objAsIList.Clear(); }, () => { foreach (var removedItem in removedItems) { _objAsIList.Add(removedItem); } })); break; } default: { throw new Exception("unknown " + typeof(NotifyCollectionChangedAction).Name + " = " + notifyCollectionChangedEventArgs.Action); } } }