How do I sort groups of data items?(WPF)
?今天我要介紹如何使用CollectionViewSource對(duì)數(shù)據(jù)進(jìn)行分組以及對(duì)各個(gè)組進(jìn)行排序
? 示例中的數(shù)據(jù)源是一組類(lèi)型為Animal的對(duì)象組成的數(shù)據(jù)集合。Animal類(lèi)包含Name和Category(枚舉類(lèi)型)兩個(gè)屬性。現(xiàn)在要以Category為分組來(lái)顯示數(shù)據(jù):
????<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}"/>
我在上一篇文章中介紹過(guò)CollecitonViewSource。CollectionViewSource類(lèi)會(huì)在數(shù)據(jù)源的上層生成一個(gè)視圖。這個(gè)視圖監(jiān)控著選中項(xiàng),并且允許我們對(duì)數(shù)據(jù)項(xiàng)進(jìn)行分組,排序和過(guò)濾
運(yùn)行上面的代碼后,可以看到動(dòng)物的名稱(chēng),但分組信息沒(méi)有顯示出來(lái)。接下來(lái)要?jiǎng)?chuàng)建一個(gè)顯示分組信息的模板。CollectionViewSource將每個(gè)分組都包裝到CollectionViewGroup對(duì)象中。然后顯示其Name屬性即可:
????<DataTemplate x:Key="categoryTemplate">
????????<TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Foreground="ForestGreen" Margin="0,5,0,0"/>
????</DataTemplate>
接下來(lái)讓ItemsControl控件的GroupStyle屬性應(yīng)用上面的模板:
????<ItemsControl ItemsSource="{Binding Source={StaticResource cvs}}">
????????<ItemsControl.GroupStyle>
????????????<GroupStyle HeaderTemplate="{StaticResource categoryTemplate}" />
????????</ItemsControl.GroupStyle>
????</ItemsControl>
如果需要顯示多級(jí)別的分組,可以添加多個(gè)GroupStyle(示例中只添加了一個(gè))
現(xiàn)在,程序已經(jīng)可以正確地顯示分組和各個(gè)項(xiàng)目了。如果還要實(shí)現(xiàn)組的排序,并對(duì)組內(nèi)的項(xiàng)進(jìn)行排序該怎么作呢?我看到有人想寫(xiě)個(gè)類(lèi)似于”SortGroups”的方法來(lái)實(shí)現(xiàn)這個(gè)功能。實(shí)際上不必這么做,只要對(duì)“進(jìn)行了分組的屬性”進(jìn)行排序就可以實(shí)現(xiàn)這個(gè)功能:
????<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>
?有一點(diǎn)需要注意:Category是一個(gè)枚舉類(lèi)型,所以“組排序”的順序是根據(jù)其在枚舉中定義的順序。而Name屬性是字符串類(lèi)型,所以“組內(nèi)排序”是根據(jù)字母順序
程序截圖:?
?
轉(zhuǎn)載于:https://www.cnblogs.com/stswordman/archive/2007/01/08/615092.html
總結(jié)
以上是生活随笔為你收集整理的How do I sort groups of data items?(WPF)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。