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); } } }
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); }