C# · 12月 23, 2021

c# – 如何使用Xaml中的SortDescriptions对TreeView项目进行排序?

我有一个绑定到TreeView的图层列表,其中每个实例都有一个“效果”列表.我通过一个HierarchicalDataTemplate显示它,它的工作原理很好,但我正在使用SortDescriptions进行排序.

我不知道如何在xaml中这样做,但是这样做只排除了第一级项目,而不是子项:

ICollectionView view = CollectionViewSource.GetDefaultView ( treeView1.ItemsSource );view.sortDescriptions.Add ( new SortDescription ( “Name”,ListSortDirection.Ascending ) );

我试图用.Color,然后由.Name排序它们.

有任何想法吗?

编辑:我添加了这段代码:

<Window.Resources> <CollectionViewSource x:Key=”SortedLayers” Source=”{Binding AllLayers}”> <CollectionViewSource.sortDescriptions> <scm:SortDescription PropertyName=”Color” /> <scm:SortDescription PropertyName=”Name” /> </CollectionViewSource.sortDescriptions> </CollectionViewSource></Window.Resources>

但是,这仍然是第一级的层次结构.如何为每一层指定它?效果集合?

解决方法 我建议使用转换器来排序子项.
这样的东西 <TreeView Name=”treeCategories” Margin=”5″ ItemsSource=”{Binding Source={StaticResource SortedLayers}}”><TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource=”{Binding Effects,Converter={StaticResource myConverter},ConverterParameter=EffectName}”> <TextBlock Text=”{Binding Path=LayerName}” /> <HierarchicalDataTemplate.ItemTemplate> <DataTemplate> <TextBlock Text=”{Binding Path=EffectName}” /> </DataTemplate> </HierarchicalDataTemplate.ItemTemplate> </HierarchicalDataTemplate></TreeView.ItemTemplate>

和转换器:

public class MyConverter : IValueConverter{ public object Convert(object value,Type targetType,object parameter,CultureInfo culture) { System.Collections.IList collection = value as System.Collections.IList; ListCollectionView view = new ListCollectionView(collection); SortDescription sort = new SortDescription(parameter.ToString(),ListSortDirection.Ascending); view.sortDescriptions.Add(sort); return view; } public object ConvertBack(object value,CultureInfo culture) { return null; }}