当将一个集合或DataTable绑定到ItemsControl控件时,在后对台会自动地创建数据视图,这个视图位于数据源和绑定的控件之间,数据视图是进行数据源的窗口。它跟踪当前项,并且提供各种功能,如排序、过滤以及分组。这些功能和数据对象本身是相互独立的,这意味着可以在窗口的不同部分使用不同的方式绑定相同的数据。使用的视图依附于数据对象,所有的视图都继承自CollectionView类,并且有两个继承自CollectionView类的特殊实现(ListCollectionView类和BindingListCollectionView),下面是CollectionView类的工作源理。

  1.如果数据源实现了IBindingList接口(这里指的是DataTable对象),此时就会创建一个BindingListCollectionView视图。

  2.如果数据源实现了INotifyCollectionChanged接口(这里指的是ObservableCollection对象),此时就会创建一个ListCollectionView视图。

  3.如果数据源没有实现IBindingList接口和INotifyCollectionChanged接口,但是实现了IEnumerable接口,就会得到一个基本的CollectionView视图。

BindingListCollectionView例子

BindingListCollectionView myBindingListCollectionView = (BindingListCollectionView)CollectionViewSource.GetDefaultView(mylistbox.ItemsSource);
myBindingListCollectionView.SortDescriptions.Add(new SortDescription("names", ListSortDirection.Descending));
myBindingListCollectionView.SortDescriptions.Add(new SortDescription("id", ListSortDirection.Ascending));

BindingListCollectionView myBindingListCollectionView = (BindingListCollectionView)CollectionViewSource.GetDefaultView(mylistbox.ItemsSource);
    myBindingListCollectionView.SortDescriptions.Clear();

ListCollectionView例子

public partial class MainWindow : Window
{
MyViewModel myViewModel = new MyViewModel();
public MainWindow()
{
InitializeComponent();
//
myViewModel.DataList = new System.Collections.ObjectModel.ObservableCollection<MyData>();
myViewModel.SourceViewList = new ListCollectionView(myViewModel.DataList); this.DataContext = myViewModel;
//
for (int i = ; i < ; i++)
{
MyData item = new MyData();
item.Name = "Name:" + i.ToString();
myViewModel.DataList.Add(item);
}
} private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
myViewModel.FilterText = txt1.Text;
myViewModel.SourceViewList.Filter = new Predicate<object>(PredicateFilter);
} private bool PredicateFilter(object obj)
{
MyData data = obj as MyData;
if (data.Name.Contains(myViewModel.FilterText))
return true; return false;
}
} public class MyViewModel
{
public string FilterText
{
get;
set;
} public System.ComponentModel.ICollectionView SourceViewList
{
get;
set;
} public System.Collections.ObjectModel.ObservableCollection<MyData> DataList
{
get;
set;
}
} public class MyData
{
public string Name
{
get;
set;
}
}

WPF使用BindingListCollectionView 和 ListCollectionView 视图排序集合的更多相关文章

  1. redis 的使用 (sort set排序集合类型操作)

    sort set排序集合类型 释义: sort set 是 string 类型的集合 sort set 的每个元素 都会关联一个 权 通过 权值 可以有序的获取集合中的元素 应用场合: 获取热门帖子( ...

  2. [WPF]ListView点击列头排序功能实现

    [转]   [WPF]ListView点击列头排序功能实现 这是一个非常常见的功能,要求也很简单,在Column Header上显示一个小三角表示表示现在是在哪个Header上的正序还是倒序就可以了. ...

  3. Android视图动画集合AndoridViewAnimations

    Android视图动画集合AndoridViewAnimations Android视图动画是针对视图对象的动画效果,包括对象平移.旋转.缩放和渐变四种类型.通过组合这四种类型,可以创建出无数种动画效 ...

  4. WPF 针对数据源某个属性进行排序

    原文:WPF 针对数据源某个属性进行排序 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wanlong360599336/article/detai ...

  5. WPF 在使用 ItemsSource 之前,项集合必须为空

    原文:WPF 在使用 ItemsSource 之前,项集合必须为空 <DataGrid x:Name="datagrid" ItemsSource="{Bindin ...

  6. openerp学习笔记 统计、分析、报表(过滤条件向导、分组报表、图形分析、比率计算、追加视图排序)

    待解决:图形中当改变分组时,图例不正确            存储比率计算时,分组合计不正确 wizard:过滤条件向导,用于输入过滤条件 wizard/sale_chart.py # -*- cod ...

  7. 【Java】使用Lambda排序集合

    下面是Java lambda表达式的简单例子: // 1. 不需要参数,返回值为 5 () -> 5 // 2. 接收一个参数(数字类型),返回其2倍的值 x -> 2 * x // 3. ...

  8. 7.SortSet排序集合类型操作

    Sort Set排序集合类型 (1)介绍 和set一样sorted set也是string类型元素的集合,不同的是每个元素都会关联一个权.通过权值可以有序的获取集合中的元素 该Sort Set类型适合 ...

  9. 【Java例题】5.4 排序集合的使用

    4.排序集合的使用.使用TreeSet模拟一个一维整数数组.其中,一维整数数组元素由Random类随机产生.最后显示排序后的结果. package chapter6; import java.util ...

随机推荐

  1. 【vue】canvas验证码组件--数字/数字加字母

    基于canvas的数字/数字+字符验证码   SIdentify.vue 组件 <!-- 基于canvas的数字/数字+字符验证码 --> <!-- 调用格式 <s-ident ...

  2. php引用 & 详解

    在PHP 中引用的意思是:不同的名字访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址 变量的引用 $a = 222; $b = &$a; ...

  3. (转) MiniUI使用

    来源于https://my.oschina.net/yunsy/blog/542597 1.MiniUI页签定位 <body> <input name = "bizType ...

  4. token和sign

    前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...

  5. 了解ffmpeg生态

    我以前整理的ffmpeg相关资料: 了解ffmpeg要读的资料 https://blog.csdn.net/yyhustim/article/details/9078941 ffmpeg和ffserv ...

  6. heike

    黑客工具 hacker disassembler engine download IDApro

  7. java高并发核心要点|系列2|锁的底层实现原理

    上篇文章,我们主要讲了解决多线程之间共享数据的核心问题和解决方案,也讲了锁的简单分类. 那么,这把锁,我们应该怎么去实现呢?如果你是java语言设计者,你又会怎么去设计这个线程锁呢? 直觉告诉我们,我 ...

  8. Oracle数据库的下载安装和配置

    前言·为了学习ORDBMS,下载一个Oracle数据库用来练习. 下载 我个人学习使用就没必要企业版 注册并登录Oracle官网 https://www.oracle.com 找到产品下载: 数据库: ...

  9. java选做猜数字

    程序设计思想 第一步:使用随机数生成1-100的数字 第二步:让用户输入数字 第三步:输入的数字与生成数字不同执行下一步,相同执行第五步 第四步:比较两数大小并输出结果,并返回第二步 第五步:输出猜对 ...

  10. tp5.1中的命名规范

    类里边用驼峰(类名首字母大写,属性和方法首字母小写) 类名:User,UserType 类中的属性和方法:getUserName(),tableName,instance 参数.数据表和字段 用小写字 ...