public void OverallSortAllChilds(SortOrder sortOrder) { switch (sortOrder) { case SortOrder.None: break; case SortOrder.Ascending: TreeViewItems = new ObservableCollection <TreeViewItemBase>(TreeViewItems.AsEnumerable().OrderBy(x => x.DisplayName)); //recursive call TreeViewItems.ToList().ForEach(x => x.OverallSortAllChilds(sortOrder)); break; case SortOrder.Descending: TreeViewItems = new ObservableCollection <TreeViewItemBase>(TreeViewItems.AsEnumerable().OrderByDescending(x => x.DisplayName)); //recursive call TreeViewItems.ToList().ForEach(x => x.OverallSortAllChilds(sortOrder)); break; case SortOrder.Reverse: TreeViewItems = new ObservableCollection <TreeViewItemBase>(TreeViewItems.AsEnumerable().Reverse()); //recursive call TreeViewItems.ToList().ForEach(x => x.OverallSortAllChilds(sortOrder)); break; default: throw new NotImplementedException(); } }