protected override void OnDrop(DragEventArgs e) { string[] ids = (e.Data.GetData(DataFormats.Text) as string ?? string.Empty).Split('|'); e.Handled = true; if (ids.Length == 2) { CsgNodeWrapper wrapper = Node.Repository.GetWrapperById(ids[0]); if (e.Effects == DragDropEffects.Move) { CsgGroupWrapper parent = Node.Repository.GetWrapperById(ids[1]) as CsgGroupWrapper; if (wrapper != null && parent != null) { CsgNodeTreeViewItem item = this; while (item != null) { if (item.Node == wrapper) { return; } item = item.Parent as CsgNodeTreeViewItem; } if (parent.RemoveChild(wrapper)) { if (!Group.AddChild(wrapper)) { parent.AddChild(wrapper); } } IsSelected = true; } } else if (e.Effects == DragDropEffects.Link) { if (wrapper != null) { Group.AddChild(wrapper); IsSelected = true; } } } base.OnDrop(e); }
private void RecursiveDelete(CsgGroupWrapper group) { if (group == null) { return; } if (group.ReferenceCount > 0) { return; } if (group.IsObjectRoot) { return; } group.Repository.RemoveNode(group); foreach (var item in group.Children.ToArray()) { group.RemoveChild(item); RecursiveDelete(item as CsgGroupWrapper); } }