好吧,我只想说我讨厌我提出的解决方案,但它确实有效。也许 WPF 大师会用更好的选择来启发我们俩。当然,如果您在视图后面使用 ViewModel,您可以简单地用 ViewModel 中的 CollectionView 包装模型的 Items 属性并完成它。
但这是另一个解决方案。基本上,您的 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;
}
}