Хорошо, позвольте мне просто сказать, что я ненавижу предложенное решение, но оно работает.Возможно, гуру WPF просветит нас обоих лучшей альтернативой.Конечно, если вы используете ViewModel за своим представлением, вы можете просто обернуть свойство Items модели с CollectionView в ViewModel и покончить с этим.
Но вот другое решение.По сути, ваш HierarchicalDataTemplate может оставаться как есть, за исключением того, что вы добавите конвертер в привязку.Я реализовал следующий конвертер и изменил 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;
}
}