void DiagramsListView_SelectionChanged(object sender, SelectionChangedEventArgs e) { ObservableDiagramLibraryNode selectedNode = VM.SelectedNode; if (null != selectedNode) { foreach (object item in e.AddedItems) { ObservableDiagram od = item as ObservableDiagram; selectedNode.SelectedDiagrams.Add(od); } foreach (object item in e.RemovedItems) { ObservableDiagram od = item as ObservableDiagram; selectedNode.SelectedDiagrams.Remove(od); } } }
public static void DiagramLibraryNodeToDragDrop(DependencyObject dragSource, ObservableDiagramLibraryNode diagramLibraryNode, bool useSelectedDiagrams) { if (null == dragSource) { throw new ArgumentNullException(nameof(dragSource)); } if (null == diagramLibraryNode) { throw new ArgumentNullException(nameof(diagramLibraryNode)); } DataObject data = new DataObject(); data.SetData(typeof(ObservableDiagramLibraryNode), diagramLibraryNode); data.SetData(UseSelectedDiagramsFormat, useSelectedDiagrams); if (useSelectedDiagrams && diagramLibraryNode.SelectedDiagrams.Count > 0) { AddImageFormats(data, diagramLibraryNode.SelectedDiagrams[0], 1.0f); } DragDrop.DoDragDrop(dragSource, data, DragDropEffects.Copy | DragDropEffects.Move); }
public static void DragDropToDiagramLibraryNode(IDataObject data, ObservableDiagramLibraryNode destinationNode, DiagramLibraryNodeDragDropAction dragDropAction) { if (null == data) { throw new ArgumentNullException(nameof(data)); } if (data.GetDataPresent(typeof(ObservableDiagramLibraryNode)) && data.GetData(typeof(ObservableDiagramLibraryNode)) is ObservableDiagramLibraryNode sourceNode) { bool useSelectedDiagrams = data.GetData(UseSelectedDiagramsFormat) as bool? ?? false; if (sourceNode == destinationNode) { if (dragDropAction == DiagramLibraryNodeDragDropAction.Copy) { if (useSelectedDiagrams) { // Cloning diagrams within the same collection if (useSelectedDiagrams && sourceNode.CloneSelected.CanExecute(null)) { sourceNode.CloneSelected.Execute(null); } } } } else { if (dragDropAction == DiagramLibraryNodeDragDropAction.Copy) { if (useSelectedDiagrams) { // Copy selected diagrams into the destination if (sourceNode.CopySelected.CanExecute(destinationNode?.Name)) { sourceNode.CopySelected.Execute(destinationNode?.Name); } } else { // Copy all diagrams into the destination if (sourceNode.CopyNode.CanExecute(null)) { sourceNode.CopyNode.Execute(destinationNode?.Name); } } } else if (dragDropAction == DiagramLibraryNodeDragDropAction.Move) { if (useSelectedDiagrams) { // Move all selected diagrams into the destination if (sourceNode.MoveSelected.CanExecute(destinationNode?.Name)) { sourceNode.MoveSelected.Execute(destinationNode?.Name); } } else { // Move all diagrams into the destination (merge) if (sourceNode.MergeNode.CanExecute(null)) { sourceNode.MergeNode.Execute(destinationNode?.Name); } } } } } }