private void xamDataTreeAccount_NodeDragEnd(object sender, Infragistics.DragDrop.DragDropEventArgs e) { if (e.OperationType != null && e.OperationType == OperationType.Copy) { XamDataTreeNode origNode = e.Data as XamDataTreeNode; if (origNode == null) { return; } PortfolioVM porfVm = origNode.Data as PortfolioVM; if (porfVm == null) { return; } XamDataTreeNodeControl treeNodeCtrl = e.DropTarget as XamDataTreeNodeControl; if (treeNodeCtrl == null) { return; } AccountVM acctVm = treeNodeCtrl.Node.Data as AccountVM; if (acctVm == null) { return; } XElement portfElem = porfVm.Persist(); var cloned = PortfolioVM.Load(acctVm, portfElem); acctVm.AddPorfolio(cloned); ViewModel.Persist(); } }
public static XamDataTreeNode FindTreeNodeFromDataItem(XamDataTree tree, object dataItem) { XamDataTreeNode targetNode = null; Action <XamDataTreeNode, object> findNode = (n, dItem) => { if (n.HasChildren) { foreach (var item in n.Nodes) { if (targetNode != null) { return; } if (item.Data == dItem) { targetNode = item; } } } }; foreach (var node in tree.Nodes) { if (node.Data == dataItem) { return(node); } } foreach (var node in tree.Nodes) { if (targetNode == null) { findNode(node, dataItem); } } return(targetNode); }
public static IEnumerable <XamDataTreeNode> Descendants(XamDataTreeNode root) { var nodes = new Stack <XamDataTreeNode>(new[] { root }); while (nodes.Any()) { XamDataTreeNode node = nodes.Pop(); yield return(node); if (node != null) { foreach (var n in node.Nodes) { if (n != null) { nodes.Push(n); } } } } }