Хорошо ... так что это не совсем то, что я хотел сделать, но результат точно такой же, и никто даже не прокомментировал, не говоря уже о ответе, поэтому я назвал это единым целым.
Первоначальная причина, по которой нам нужно было это сделать, - сортировка по узлам.Хотя мы никогда не заставляли работать CollectionViewSource, нам удалось применить сортировку непосредственно к узлам.Хитрость заключается в том, чтобы сделать это либо во время создания узла, либо так, как мы это делаем, когда узел расширяется (мы используем связывание, поэтому мы не создаем узлы вручную.)
Обратите внимание, что нашФактический код отслеживает, если мы уже применили сортировку к рассматриваемому узлу, поэтому он не выполняется для каждого события «Expanded», но этот код не имеет отношения к этому вопросу, поэтому я для краткости опустил его.Тем не менее, вы должны добавить что-то похожее.
В любом случае, вот как вы можете выполнить сортировку по узлам ...
private void tvSymbols_Expanded(object sender, RoutedEventArgs e) {
TreeViewItem node = e.OriginalSource as TreeViewItem;
if(node==null) return;
node.Items.SortDescriptions.Clear();
node.Items.SortDescriptions.Add(new SortDescription("SomeField", ListSortDirection.Ascending));
node.Items.SortDescriptions.Add(new SortDescription("SomeOtherField", ListSortDirection.Descending));
}
Конечно, если кто-то все еще выяснит, почему исходный код вопроса не сделалне работай, дай знать!
Марк