void PasteItemDatas(List<ItemData> copys, ItemData selectedItem, RangeObservableCollection<ItemData> itemsSource, Point clickPoint) { var list = new List<ItemData>(); var item = selectedItem; if (selectedItem != null) { var roots = copys.Where(x => x.ItemParentId == item.ItemId); foreach (var itemData in roots) { if (itemData.ItemParentId.IsNullOrEmpty()) { itemData.Left = clickPoint.X; itemData.Top = clickPoint.Y; } list.Add(itemData); list.AddRange(AddChild(copys, itemData)); } itemsSource.AddRange(list); } else { var roots = copys.Where(x => copys.All(y => y.ItemId != x.ItemParentId)); foreach (var r in roots) { if (r.ItemParentId.IsNullOrEmpty()) { r.Left = clickPoint.X; r.Top = clickPoint.Y; } r.ItemParentId = string.Empty; list.Add(r); list.AddRange(AddChild(copys, r)); } itemsSource.AddRange(list); } }
List<ItemData> GetItemDatasToBeCopy(List<ItemData> dataItemOnClipBoard, ItemData parentItemData, List<ItemData> itemSource, string type) { var copys = new List<ItemData>(); var copyItems = CopyedItems(dataItemOnClipBoard, itemSource, type); foreach (var copyItem in copyItems) { if (copyItem.ItemParentId == string.Empty) { if (parentItemData != null) { copyItem.ItemParentId = parentItemData.ItemId; } else { copyItem.ItemParentId = string.Empty; } } copys.Add(copyItem); } return copys; }
List<ItemData> GetAllCopyItem(List<ItemData> selectedItemDatas, List<ItemData> itemSource) { var list = selectedItemDatas.Select(d => new ItemData(d.ItemId, d.ItemParentId, d.Text, d.Desc, d.ItemStyle, d.Left, d.Top)).ToList(); var childrens = new List<ItemData>(); //把子节点也添加进来 foreach (var selectedItemData in list) { var children = GetAllSubItemDatas(itemSource, selectedItemData); foreach (var d in children) { if (childrens.Any(x => x.ItemId == d.ItemId)) continue; var data = new ItemData(d.ItemId, d.ItemParentId, d.Text, d.Desc, d.ItemStyle, d.Left, d.Top); childrens.Add(data); } } var result = childrens.Where(children => selectedItemDatas.All(x => x.ItemId != children.ItemId)).ToList(); result.AddRange(list); return result; }
List<ItemData> GetAllSubItemDatas(IList<ItemData> itemDatas, ItemData itemData) { var result = new List<ItemData>(); var child = new List<ItemData>(); var list = itemDatas.Where(x => x.ItemParentId == itemData.ItemId); foreach (var subItem in list.Where(subitem => !result.Contains(subitem))) { child.Add(subItem); result.Add(subItem); foreach (var item in child) { result.AddRange(GetAllSubItemDatas(itemDatas, item)); } } return result; }
List<ItemData> AddChild(List<ItemData> itemDatas, ItemData itemData) { var list = new List<ItemData>(); var roots = itemDatas.Where(x => x.ItemParentId == itemData.ItemId); foreach (var data in roots) { list.Add(data); list.AddRange(AddChild(itemDatas, data)); } return list; }