private void AddChildrenRecursive(ParseTreeNode node, TreeViewItem item, ICollection <TreeViewItem> rows) { item.children = new List <TreeViewItem>(node.Children.Length); foreach (var child in node.GetChildren(ParseTree)) { var childItem = new TreeViewItem { id = (int)child.Id, displayName = child.Name }; item.AddChild(childItem); rows.Add(childItem); if (child.IsLeaf) { continue; } if (IsExpanded(childItem.id)) { AddChildrenRecursive(ParseTree[child.Id], childItem, rows); } else { childItem.children = CreateChildListForCollapsedParent(); } } }