当将一个集合或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. Bootstrap4中栅格系统CSS中 col-sm-* col-md-* col-lg-*的意义以及当其同时具有col-xs-* col-sm-* col-md-* col-lg-*的含义

    根据Bootstrap--Grid 中 col-sm-* col-md-* col-lg-* col-xl-*的意义: .col-sm-* 小屏幕 手机 (≥ 576px) .col-md-* 中等屏 ...

  2. mysql注入大全及防御

    0.明白存在的位置:get型 post型 cookie型 http头注入 1.先测试注入点,注册框.搜索框.地址栏啥的,判断是字符型,搜索型还是数字型 字符型 1' and '1'='1 成功, 1' ...

  3. 85. Maximal Rectangle (JAVA)

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  4. Python 列表元素里面含有字典或者列表进行排序

    示例1:列表里面含有列表进行排序 s = [[1, 2], [100, 2], [33, 3], [25, 6]] s.sort(key=lambda k: k[0]) print(s) 结果: [[ ...

  5. 6U VPX 加固智能计算异构服务器

    6U VPX 加固智能计算异构服务器     北京太速科技有限公司在线客服:QQ:448468544 公司网站:www.orihard.com联系电话:15084122580

  6. C#实现Base64处理加解密

    using System;using System.Text; namespace Common{    /// <summary>    /// 实现Base64加密解密    ///  ...

  7. Python之网路编程之线程介绍

    一.什么是线程 线程:顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才 ...

  8. C# List 过滤,排序,删除

    taskList_IsManager.Where(p => p.IsManager == "1").ToList(); taskList = taskList.OrderBy ...

  9. Java面试之基础篇(5)

    41.a.hashCode() 有什么用?与 a.equals(b) 有什么关系?        hashCode() 方法对应对象整型的 hash 值.它常用于基于 hash 的集合类,如 Hash ...

  10. C2MIF软件使用说明

    1.右击---管理员身份运行 2.打开文件txt---搞定!