void Sort <T>(T rootItem, Comparison <TreeViewItem> func, Comparison <int> intfunc) where T : TreeViewItem { rootItem.children.Sort(func); Stack <TreeViewItem> itemstack = StackPool <TreeViewItem> .Get(); foreach (var child in rootItem.children) { itemstack.Push(child); } while (itemstack.Count > 0) { var item = itemstack.Pop(); if (_treeView.IsExpanded(item.id) && item.children.Count > 0 && item.children[0] != null) { foreach (var child in item.children) { itemstack.Push(child); } item.children.Sort(func); } } StackPool <TreeViewItem> .Release(itemstack); _model.Sort(intfunc); }