linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > asp.net >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·NetBPM工作流的一个示例:请假
·Office Web Components(OWC)绘
·asp.net正则表达式语法
·asp.net 2.0 ajax中使用PopupC
·Ado.Net读取Excel常见问题总结
·数据源为空时如何让GridView显
·如何让UpdatePanel支持文件上传
·C#.Net的常见面试试题和参考答
·asp.net ajax客户端编程+jquer
·Brettle.Web.NeatUpload.dll支
·ASP.NET使用Cookie
·ASP.NET DEMO 15: 同时支持行单
·如何使IE的后退按钮无效
·如何在ASP.NET中用OWC绘制图表
·asp.net:正确判断当前用户角色
最新文章
·Ajax Control Toolkit Animati
·讨论一下类似BlogEngine内一次
·使用CSS+SiteMap+UserControl+
·Asp.net中多彩下拉框的实现
·浅谈ASP.NET的Postback
·分清ASP.NET AJAX中的Extender
·Tip:在使用AjaxControlTookit
·有关注册DataItem的一些可能被
·IIRF(Ionic's Isapi Rewrite
·asp.net 客户端回调功能的实现
·关于控件部分的看法--读Progra
·为什么在vista上做开发
·如何封装JS和CSS文件为服务器端
·岂今我看过的最强的排序算法
·设计模式学习笔记之单件模式
Google
 
谈谈WPF中的CollectionView与CollectionViewSource (1)
[ 作者:  加入时间:2007-12-13 15:49:48  来自:Linux联盟收集整理 ]
  1,CollectionView是什么? UVFLinux联盟
  事实上当你将后台数据列表绑定到一个列表控件时,WPF为了默默地在数据列表和列表控件之间增加了层称为CollectionView(列表视图)的东西,其支持很多高级操作,比如排序,分组,过滤等.这样我们就可以将这个过程分成3个部分来看:数据列表(维持着后台数据),列表视图(维持着一些附加状态,比如"当前项","排序"等),列表控件(负责对CollectionView的呈现,而不是对Collection) UVFLinux联盟
  CollectionView是针对数据的,但它不会改变数据,仅仅是对数据的"映像"进行"排列组合排序"等等.一组数据可以有若干个CollectionView,就像可以对一个人拍摄若干DV一样.所以针对后台给我们的一组数据我们可以同时为用户提供若干种展现方式. UVFLinux联盟
  列表控件(比如ListBox)可以针对数据,也可以针对CollectionView,比如我们可以手动地向其Items集合中添加数据,也可以用ItemsSource来指定数据来源,前者是针对数据本身,这需要我们来手动维护数据的和控件之间的关系.后者是针对CollectionView,如果你没有指定列表控件对应的CollectionView,那么WPF会自动插入一个.(需要注意的是:由于同时指定Items和ItemsSource会造成混乱,所以不可以同时操作他们) UVFLinux联盟
  比如:<ListBox ItemsSource="{Binding Source={StaticResource myList}}"/> UVFLinux联盟
  或者: CollectionView cv = new CollectionView(myList); UVFLinux联盟
  this.listBox.ItemsSource = cv; UVFLinux联盟
  2,CollectionViewSource是什么? UVFLinux联盟
  CollectionViewSource是CollectionView的一个XAML代理,意思就是说CollectionView不能在XAML中使用,如果希望在XML将CollectionView绑定到某个列表控件,那么请使用CollectionViewSource.它与CollectionView的基本关系是"HAS A". CollectionViewSource拥有一个CollectionView类型的View属性来指定其对应的CollectionView对象,与之对应的,其还有一个Source属性,来指明数据来源.一个简单的流程是:将数据列表绑定到CollectionViewSource的Source属性,然后将列表控件的ItemsSource属性绑定到CollectionViewSource的View属性.为什么不直接将列表控件的ItemSource属性绑定到数据列表呢,这取决于你是否需要查找到该CollectionViewSource进而查找到其View来进行视图操作(比如排序,导航等).这可能说得有些混乱了.看看下面的例子: UVFLinux联盟
   <Window.Resources> UVFLinux联盟
   UVFLinux联盟
   <XmlDataProvider x:Key="Employees" XPath="/Employees/*"> UVFLinux联盟
   <x:XData> UVFLinux联盟
   <Employees xmlns=""> UVFLinux联盟
   <Employee Name="Terry Adams" Type="FTE" EmployeeNumber="1" /> UVFLinux联盟
   <Employee Name="Claire O&apos;Donnell" Type="FTE" EmployeeNumber="12345" /> UVFLinux联盟
   <Employee Name="Palle Peterson" Type="FTE" EmployeeNumber="5678" /> UVFLinux联盟
   <Employee Name="Amy E. Alberts" Type="CSG" EmployeeNumber="99222" /> UVFLinux联盟
   <Employee Name="Stefan Hesse" Type="Vendor" EmployeeNumber="-" /> UVFLinux联盟
   </Employees> UVFLinux联盟
   </x:XData> UVFLinux联盟
   </XmlDataProvider> UVFLinux联盟
   UVFLinux联盟
   <DataTemplate DataType="Employee"> UVFLinux联盟
   <TextBlock Text="{Binding XPath=@Name}" /> UVFLinux联盟
   </DataTemplate> UVFLinux联盟
   UVFLinux联盟
   </Window.Resources> UVFLinux联盟
   UVFLinux联盟
   <StackPanel> UVFLinux联盟
   <ListBox ItemsSource="{Binding Source={StaticResource Employees}}"/> UVFLinux联盟
   </StackPanel>上面的例子中,我们按照传统的方式,将ListBox的ItemsSource绑定到一个XMLDataProvider上,工作得很好,后来我们发现WPF中可以利用CollectionView来实现列表排序,当然这种排序我们希望仅仅是在表现层,所以我们决定我XAML来做.当在实际改造这段代码的过程中,我们伤透了脑子,因为要在XAML中为我们的数据找到CollectionView对象并非易事. UVFLinux联盟
  事实上,我们仅仅需要改变一下数据绑定的流程就可以了.我们将数据与CollectionViewSource关联,然后CollectionViewSource与列表控件相关联,然后我们就可以在CollectionViewSource插入我们任何想要的排序方式了. UVFLinux联盟
   <Window.Resources> UVFLinux联盟
   UVFLinux联盟
   <XmlDataProvider x:Key="Employees" XPath="/Employees/*"> UVFLinux联盟
   <x:XData> UVFLinux联盟
   <Employees xmlns=""> UVFLinux联盟
   <Employee Name="Terry Adams" Type="FTE" EmployeeNumber="1" /> UVFLinux联盟
   <Employee Name="Claire O&apos;Donnell" Type="FTE" EmployeeNumber="12345" /> UVFLinux联盟
   <Employee Name="Palle Peterson" Type="FTE" EmployeeNumber="5678" /> UVFLinux联盟
   <Employee Name="Amy E. Alberts" Type="CSG" EmployeeNumber="99222" /> UVFLinux联盟
   <Employee Name="Stefan Hesse" Type="Vendor" EmployeeNumber="-" /> UVFLinux联盟
   </Employees> UVFLinux联盟
   </x:XData> UVFLinux联盟
   </XmlDataProvider> UVFLinux联盟
   UVFLinux联盟
   <CollectionViewSource x:Key="cvs" Source="{Binding Source={StaticResource Employees}, XPath=/Employees/*}"> UVFLinux联盟
   <CollectionViewSource.SortDescriptions> UVFLinux联盟
   <!--在这里插入排序描述--> UVFLinux联盟
   </CollectionViewSource.SortDescriptions> UVFLinux联盟
   <CollectionViewSource.GroupDescriptions> UVFLinux联盟
   <!--在这里插入分组描述--> UVFLinux联盟
   </CollectionViewSource.GroupDescriptions> UVFLinux联盟
   </CollectionViewSource> UVFLinux联盟
   UVFLinux联盟
   <DataTemplate DataType="Employee"> UVFLinux联盟
   <TextBlock Text="{Binding XPath=@Name}" /> UVFLinux联盟
   </DataTemplate> UVFLinux联盟
   UVFLinux联盟
   </Window.Resources> UVFLinux联盟
   UVFLinux联盟
   <StackPanel> UVFLinux联盟
   <ListBox ItemsSource="{Binding Source={StaticResource cvs}}" x:Name="lb"/> UVFLinux联盟
   </StackPanel>   Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息