Exemple #1
0
        protected override UndoToken Redo(object parameter, bool creatingActionItem)
        {
            UndoToken token;
            object    index;
            var       modelNode = NodePath.GetSourceNode(out index);

            if (modelNode == null)
            {
                throw new InvalidOperationException("Unable to retrieve the node on which to apply the redo operation.");
            }

            var currentValue = modelNode.GetValue(index);
            var newValue     = NodeCommand.Invoke(currentValue, parameter, out token);

            modelNode.SetValue(newValue, index);
            Refresh(modelNode, index);

            var additionalToken = new UndoToken();

            if (AdditionalCommand != null)
            {
                additionalToken = AdditionalCommand.ExecuteCommand(null, false);
            }
            return(new UndoToken(token.CanUndo, new ModelNodeToken(token, additionalToken)));
        }
        private void RaiseAdditionalCommand()
        {
            if (AdditionalCommand != null)
            {
                RoutedCommand rc = AdditionalCommand as RoutedCommand;

                if (rc != null)
                {
                    rc.Execute(AdditionalCommandParameter, null);
                }
                else
                {
                    AdditionalCommand.Execute(AdditionalCommandParameter);
                }
            }
        }
Exemple #3
0
        protected override void Undo(object parameter, UndoToken token)
        {
            object index;
            var    modelNode = NodePath.GetSourceNode(out index);

            if (modelNode == null)
            {
                throw new InvalidOperationException("Unable to retrieve the node on which to apply the undo operation.");
            }

            var modelNodeToken = (ModelNodeToken)token.TokenValue;
            var currentValue   = modelNode.GetValue(index);
            var newValue       = NodeCommand.Undo(currentValue, modelNodeToken.Token);

            modelNode.SetValue(newValue, index);
            Refresh(modelNode, index);

            AdditionalCommand?.UndoCommand(null, modelNodeToken.AdditionalToken);
        }