[toc]
我们通常以List、ObservableCollection等集合作为数据源,但如果需要实现数据分组、排序、过滤等功能可以采用CollectionViewSource。
初始化:
list为数据源
CollectionViewSource viewSrc = new CollectionViewSource(list);
或者
CollectionViewSource viewSrc = new CollectionViewSource();
viewSrc.Source = list;
分组
以属性RoleType来进行分组
viewSrc.GroupDescriptions.Add(new PropertyGroupDescription("RoleType")); //以属性RoleType来进行分组
过滤
viewSrc.Filter += ViewSrcOnFileter;
private void ViewSrcOnFileter(object sender, FilterEventArgs e)
{
var data = e.Item as ChatUserInfo; // ChatUserInfo是作为CollectionViewSource数据源的集合的类型。
e.Accepted = true;//赋值true表示接受改数据项在集合中显示,false就表示该数据项不在集合中显示。
}
viewSrc.Source = list; // list 是 List<ChatUserInfo>
视图刷新
viewSrc.View.Refresh();
绑定Binding
绑定时以viewSrc.View作为数据源。
其他问题
设置CollectionViewSource作为数据源的控件默认会选中列表第一项,可以通过设置 IsSynchronizedWithCurrentItem="False"
来解决默认选中第一项的问题。