internal static bool ApplyPreset(this WorkspaceModel workspace, PresetModel state) { if (state == null) { return(false); } //start an undoBeginGroup using (var undoGroup = workspace.UndoRecorder.BeginActionGroup()) { //reload each node, and record each each modification in the undogroup foreach (var node in state.Nodes) { //check that node still exists in this workspace, //otherwise bail on this node, check by GUID instead of nodemodel if (workspace.Nodes.Select(x => x.GUID).Contains(node.GUID)) { var originalpos = node.Position; var serializedNode = state.SerializedNodes.ToList().Find(x => Guid.Parse(x.GetAttribute("guid")) == node.GUID); //overwrite the xy coords of the serialized node with the current position, so the node is not moved serializedNode.SetAttribute("x", originalpos.X.ToString(CultureInfo.InvariantCulture)); serializedNode.SetAttribute("y", originalpos.Y.ToString(CultureInfo.InvariantCulture)); serializedNode.SetAttribute("isPinned", node.PreviewPinned.ToString()); workspace.UndoRecorder.RecordModificationForUndo(node); workspace.ReloadModel(serializedNode); } } //select all the modified nodes in the UI DynamoSelection.Instance.ClearSelection(); foreach (var node in state.Nodes) { DynamoSelection.Instance.Selection.Add(node); } } return(true); }