Хорошо, позвольте мне сказать, что я ненавижу свое предлагаемое решение, но оно действительно работает. Возможно, гуру WPF просветит нас как лучшей альтернативой. Конечно, если бы вы использовали ViewModel за вашим представлением, вы могли бы просто обернуть свойство Items модели с помощью CollectionView в ViewModel и сделать с ним.
Но вот еще одно решение. В принципе, ваш HierarchicalDataTemplate может оставаться как есть, кроме добавления конвертера в Binding. Я внедрил следующий конвертер и соответственно изменил XAML.
<HierarchicalDataTemplate DataType="{x:Type books:Container}"
ItemsSource="{Binding Items, Converter={x:Static local:CollectionViewConverter.Instance}}">
<nav:ContainerControl />
</HierarchicalDataTemplate>
CollectionViewConverter.cs
public class CollectionViewConverter : IValueConverter
{
public CollectionViewConverter() {}
static CollectionViewConverter(){
Instance = new CollectionViewConverter();
}
public static CollectionViewConverter Instance {
get;
set;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var view = new ListCollectionView((System.Collections.IList)value);
view.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
return view;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// not really necessary could just throw notsupportedexception
var view = (CollectionView)value;
return view.SourceCollection;
}
}
Большой вопрос; собирался спросить того же самого. Благодаря! :-) –