我有一个绑定到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; } }