WPF CollectionViewSource CollectionView

CollectionView 通俗讲就是可以对你绑定的集合可以进行 分组,排序 等功能

CollectionViewSource  根据字面意思是xxx的数据源

详细的介绍还是看

http://www.cnblogs.com/zhouyinhui/archive/2007/12/07/987076.html

文字描述太复杂 了看不懂  

最后只知道一句

可以对你页面绑定的集合(gridview listBox等)可以进行分组 排序等功能。

 

例子:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
        Title="MainWindow" Height="350" Width="525" Name="UI">

    <!--资源文件(页面级) 类似javascript什么的全局变量-->
    <Window.Resources>
        <!--x:Key="Items" 类似申明一个ID Source数据源 binding--> 
        <CollectionViewSource x:Key="objID" Source="{Binding ElementName=UI, Path=Items}" >
            <CollectionViewSource.SortDescriptions>
                
                <!--scm ComponentModel命名空间下 你说我个小白开始知道吗?-->
                <!--PropertyName="Id" 理解key value 类似(color: #075db3;) PropertyName=>color  Id Items里面的属性-->
                <scm:SortDescription PropertyName="Id" />
                
            </CollectionViewSource.SortDescriptions>
        </CollectionViewSource>
        
    </Window.Resources>

    <Grid>
        <!--实例化具体的控件类 数据源来源于上面指定的ID StaticResource 静态-->
        <ListBox ItemsSource="{Binding Source={StaticResource objID}}" />
    </Grid>
</Window>

后台cs:

    public partial class MainWindow : Window
    {

        /// <summary>
        /// ObservableCollection 通俗就是myVar变了我会告诉你 通知你(类似线程的回调函数通知UI线程一样)
        /// </summary>
        private ObservableCollection<MyObject> myVar = new ObservableCollection<MyObject>();

        /// <summary>
        /// 属性没什么好解释的
        /// </summary>
        public ObservableCollection<MyObject> Items
        {
            get { return myVar; }
            set { myVar = value; }
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        public MainWindow()
        {
            //创建页面控件和实例化一些对象如窗体 你为什么是控件呢 为什么要我搞cs呢?你不知道我讨厌控件吗?
            InitializeComponent();

            //赋值 add 没什么好解释的
            Items.Add(new MyObject { Description = "Stack", Id = 5 });
            Items.Add(new MyObject { Description = "OverFlow", Id = 1 });
            Items.Add(new MyObject { Description = "StackOverFlow", Id = 2 });
            Items.Add(new MyObject { Description = "Stack", Id = 1 });
            Items.Add(new MyObject { Description = "Stack", Id = 0 });
            Items.Add(new MyObject { Description = "OverFlow", Id = 7 });                 
        }

    }

    /// <summary>
    /// 申明类 没什么好解释的
    /// </summary>
    public class MyObject
    {
        public int Id { get; set; }

        public string Description { get; set; }

        /// <summary>
        /// 重写ToString方法
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return string.Format("Desc: {0}, Id: {1}", Description, Id);
        }
    }

结果:

 

核心:

binging

前台和后台最终编译成一个类(dll) 说的通俗一点就是前台和后台在是一个类 一个类里面互相调用方法和属性 不是很正常吗?这样就理解了

为什么前台可以调用后台 (说到底 不管什么最后都是对象 就是对象之间的访问!这个也行就是oop吧)

最后Window 是根 他就有所有后台的方法和属性

最后 Source="{Binding ElementName=UI, Path=Items}" 翻译成汉语就是:绑定到元素名称为  UI 的对象的名称为 Items 的属性。

通俗 就是我的数据源是name是UI(就是window里面的name) Items就是UI里面的属性 

同理 Source = "{Binding Items}" 翻译成汉语就是绑定到当前数据上下文的名称为 Items 的属性。上下文=>DataContext

 

最后吐槽下 微软你为什么封装的那么完美 你知道对别人来说意味着什么 =>Long live open source

 

 

 

 

 

 

posted @ 2014-06-05 18:09  s_p  阅读(1080)  评论(0编辑  收藏  举报