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