static bool Remove(ObservableList <TreeNode <TItem> > nodes, Predicate <TreeNode <TItem> > match) { var index = nodes.FindIndex(match); if (index != -1) { nodes.RemoveAt(index); return(true); } foreach (var node in nodes) { if (node.Nodes == null) { continue; } if (Remove(node.Nodes, match)) { return(true); } } return(false); }
/// <summary> /// Recalculates the selected indices. /// </summary> /// <returns>The selected indices.</returns> /// <param name="newItems">New items.</param> protected override List <int> RecalculateSelectedIndices(ObservableList <ListNode <TItem> > newItems) { if (DeselectCollapsedNodes) { return(base.RecalculateSelectedIndices(newItems)); } else { return(selectedNodes.Select <TreeNode <TItem>, int>(x => newItems.FindIndex(l => l.Node == x)).Where(x => x != -1).ToList()); } }
/// <summary> /// Recalculates the selected indices. /// </summary> /// <returns>The selected indices.</returns> /// <param name="newItems">New items.</param> protected override List <int> RecalculateSelectedIndices(ObservableList <ListNode <TItem> > newItems) { if (DeselectCollapsedNodes) { return(base.RecalculateSelectedIndices(newItems)); } else { var indices = new List <int>(); foreach (var node in selectedNodes) { var index = newItems.FindIndex(l => l.Node == node); if (index != -1) { indices.Add(index); } } return(indices); } }
/// <summary> /// Get indicies of specified nodes. /// </summary> /// <returns>The indicies.</returns> /// <param name="targetNodes">Target nodes.</param> protected List <int> Nodes2Indicies(IEnumerable <TreeNode <TItem> > targetNodes) { return(targetNodes.Select(x => NodesList.FindIndex(y => x == y.Node)).Where(i => i != -1).ToList()); }