zoukankan      html  css  js  c++  java
  • WPF使用BindingListCollectionView 和 ListCollectionView 视图排序集合

    当将一个集合或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 = 0; i < 100; 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;
            }
        }
    View Code
  • 相关阅读:
    Redis-cluster集群【第二篇】:redis持久化
    Redis-cluster集群【第一篇】:redis安装及redis数据类型
    django2.0 官方中文文档地址
    jenkins设置CSRF 协议(CRUMB值设置)
    elasticsearch-dump 迁移es数据 (elasticdump)
    大独裁者最后演讲台词
    面向对象的弊端是什么(转)
    IntelliJ IDEA 破解
    Django 2.0.1 官方文档翻译:接下来读什么(page 14)
    Django 2.0.1 官方文档翻译: 高级教程:如何编写可重用的app (page 13)
  • 原文地址:https://www.cnblogs.com/tianciliangen/p/5377251.html
Copyright © 2011-2022 走看看