コード例 #1
0
        private void Flush()
        {
            if (this.IsFlushPending)
            {
                this.IsFlushPending = false;
                StopTimer();

                var changePropertyRevertibleCommand = new ChangePropertyRevertibleCommand(_instance, _propertyInfo, LastUpdatedValue, OldValueToFlush, CommandDescription);
                _undoRedoService.AddExecutedCommand(changePropertyRevertibleCommand);
            }
        }
コード例 #2
0
        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);
            }
            }
        }