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); }