How do I sort groups of data items?(WPF)
?今天我要介紹如何使用CollectionViewSource對數據進行分組以及對各個組進行排序
? 示例中的數據源是一組類型為Animal的對象組成的數據集合。Animal類包含Name和Category(枚舉類型)兩個屬性。現在要以Category為分組來顯示數據:
????<Window.Resources>
????????<local:Animals x:Key="animals"/>
????????<CollectionViewSource x:Key="cvs" Source="{Binding Source={StaticResource animals}, Path=AnimalList}">
????????????<CollectionViewSource.GroupDescriptions>
????????????????<PropertyGroupDescription PropertyName="Category"/>
????????????</CollectionViewSource.GroupDescriptions>
????????</CollectionViewSource>
????????<DataTemplate x:Key="animalTemplate">
????????????<TextBlock Text="{Binding Path=Name}" Foreground="MediumSeaGreen"/>
????????</DataTemplate>
????</Window.Resources>
????<ItemsControl ItemsSource="{Binding Source={StaticResource cvs}}" ItemTemplate="{StaticResource animalTemplate}"/>
我在上一篇文章中介紹過CollecitonViewSource。CollectionViewSource類會在數據源的上層生成一個視圖。這個視圖監控著選中項,并且允許我們對數據項進行分組,排序和過濾
運行上面的代碼后,可以看到動物的名稱,但分組信息沒有顯示出來。接下來要創建一個顯示分組信息的模板。CollectionViewSource將每個分組都包裝到CollectionViewGroup對象中。然后顯示其Name屬性即可:
????<DataTemplate x:Key="categoryTemplate">
????????<TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Foreground="ForestGreen" Margin="0,5,0,0"/>
????</DataTemplate>
接下來讓ItemsControl控件的GroupStyle屬性應用上面的模板:
????<ItemsControl ItemsSource="{Binding Source={StaticResource cvs}}">
????????<ItemsControl.GroupStyle>
????????????<GroupStyle HeaderTemplate="{StaticResource categoryTemplate}" />
????????</ItemsControl.GroupStyle>
????</ItemsControl>
如果需要顯示多級別的分組,可以添加多個GroupStyle(示例中只添加了一個)
現在,程序已經可以正確地顯示分組和各個項目了。如果還要實現組的排序,并對組內的項進行排序該怎么作呢?我看到有人想寫個類似于”SortGroups”的方法來實現這個功能。實際上不必這么做,只要對“進行了分組的屬性”進行排序就可以實現這個功能:
????<CollectionViewSource x:Key="cvs" Source="{Binding Source={StaticResource animals}, Path=AnimalList}">
????????<CollectionViewSource.GroupDescriptions>
????????????<PropertyGroupDescription PropertyName="Category"/>
????????</CollectionViewSource.GroupDescriptions>
????????<CollectionViewSource.SortDescriptions>
????????????<scm:SortDescription PropertyName="Category" />
????????????<scm:SortDescription PropertyName="Name" />
????????</CollectionViewSource.SortDescriptions>
????</CollectionViewSource>
?有一點需要注意:Category是一個枚舉類型,所以“組排序”的順序是根據其在枚舉中定義的順序。而Name屬性是字符串類型,所以“組內排序”是根據字母順序
程序截圖:?
?
轉載于:https://www.cnblogs.com/stswordman/archive/2007/01/08/615092.html
總結
以上是生活随笔為你收集整理的How do I sort groups of data items?(WPF)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Url传递中文
- 下一篇: asp.net ajax控件工具集 Au