WPF里ItemsControl的分组实现

原文:WPF里ItemsControl的分组实现

  我们在用到ItemsControl时,有时会用到分组,如ListBox,ListView,DataGrid。WPF的ItemsControl可以实现分组,是依托于GroupStyle,以ListBox为例,他的分组效果图为:

  以下为前台:

   <ListBox Name="lbMain"><ListBox.ItemTemplate><DataTemplate><StackPanel Orientation="Horizontal"><TextBlock Width="150" Text="{Binding FileName}" /><TextBlock Width="100" Text="{Binding AuthorName}" /><TextBlock Width="100" Text="{Binding UpTime}" /></StackPanel></DataTemplate></ListBox.ItemTemplate><ListBox.GroupStyle><GroupStyle><GroupStyle.ContainerStyle><Style TargetType="{x:Type GroupItem}"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type GroupItem}"><Expander ExpandDirection="Down" IsExpanded="True"><Expander.Header><StackPanel Orientation="Horizontal"><TextBlock VerticalAlignment="Center" Text="{Binding Path=Name}" /><TextBlockMargin="5,0,0,0"VerticalAlignment="Center"Text="{Binding Path=ItemCount, StringFormat=数量:{0}}" /><Button Margin="5,0,0,0" Content="Sale" /></StackPanel></Expander.Header><ItemsPresenter /></Expander></ControlTemplate></Setter.Value></Setter></Style></GroupStyle.ContainerStyle></GroupStyle></ListBox.GroupStyle></ListBox>

  从16行可以看出,GroupStyle定义的是控件内部样式,所以有人尝试在这里绑实体数据属性的话肯定是失败的,注意25行只能是Name,不管分组的属性叫什么名,这都只能是Name,我写了个Button在里面,如果想知道为什么只能是Name,写个Click处理,把Button的DataContext打印出来就什么都知道了。如果想在这里做更多的处理,比如进行一些负责的运算,可以写加转换器。

  这里只是弄了一个原始的Expander装载分组控件,需要美化可以另写样式。

  以下是后台:

   public partial class WindowListBoxDemo : Window{public ObservableCollection<ModelFile> CollectionModelFile = new ObservableCollection<ModelFile>();public WindowListBoxDemo(){InitializeComponent();CollectionModelFile.Add(new ModelFile() { FileName = "WPF进化史", AuthorName = "王鹏", UpTime = "2014-10-10" });CollectionModelFile.Add(new ModelFile() { FileName = "WPF概论", AuthorName = "大飞", UpTime = "2014-10-10" });CollectionModelFile.Add(new ModelFile() { FileName = "WPF之美", AuthorName = "小虫", UpTime = "2014-10-11" });CollectionModelFile.Add(new ModelFile() { FileName = "WPF之道", AuthorName = "青草", UpTime = "2014-11-11" });CollectionModelFile.Add(new ModelFile() { FileName = "WPF之禅", AuthorName = "得瑟鬼", UpTime = "2014-11-11" });CollectionModelFile.Add(new ModelFile() { FileName = "WPF入门", AuthorName = "今晚吃什么", UpTime = "2014-11-11" });CollectionModelFile.Add(new ModelFile() { FileName = "WPF神技", AuthorName = "无间道王二", UpTime = "2014-12-12" });CollectionModelFile.Add(new ModelFile() { FileName = "WPF不为人知之密", AuthorName = "星期八", UpTime = "2014-12-12" });CollectionModelFile.Add(new ModelFile() { FileName = "WPF之革命", AuthorName = "两把刀", UpTime = "2014-12-12" });lbMain.ItemsSource = CollectionModelFile;ICollectionView cv = CollectionViewSource.GetDefaultView(lbMain.ItemsSource);cv.GroupDescriptions.Add(new PropertyGroupDescription("UpTime"));}}public class ModelFile{public string FileName { get; set; }public string AuthorName { get; set; }public string UpTime { get; set; }}

  重点是28、29行,有了这两句,ListBox就能准确得分组显示了,其他ItemsControl的分组类同。

  至此一个简单的ListBox分组显示就完成了,Demo已放群里,需要的可以下载来看。

posted on 2018-09-21 21:36 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/9688570.html

WPF里ItemsControl的分组实现相关推荐

  1. 编程小问题系列(2)——为什么WPF里MediaElement等视频控件不起作用

    为什么WPF里MediaElement等视频控件不起作用? 非常可能的原因是因为没有安装Microsoft Windows Media Player 10或者10以上的播放器,MSDN文档里 就写有下 ...

  2. es 指定排序字段_ES里多字段分组后排序

    ES里多字段分组再排序,只有两种办法,其他办法都不准: 办法一:用script 如 //主桶:设置要聚合的字段,sql TermsBuilder one = AggregationBuilders.t ...

  3. wpf里的menu怎么用_股市里的两市成交量是什么,它反映了什么,我是怎么用它来定投的...

    大家好,我是基金定投实验记录人阿涛 我以前说过我自己的定投经验,是根据两市成交量作为一个参考值来变动我自己的定投额度的.有些网友呢,就留言问我,两市成交量是什么,在哪里看,怎么用这个数据. 今天我就想 ...

  4. WPF,ListView设置分组

    CollectionViewSource 绑定的是从数据库取出的数据ListBind以DeptName为分组依据 <Window.Resources> <CollectionView ...

  5. 在WPF里使用指纹认证(一、安装SDK)

    下载SDK 实验室的指纹工具是U.are.U 4000,在http://www.digitalpersona.com,经过一系列登陆后,可以下得SDK.这是一个压缩包,解压后如下: 安装SDK 进入S ...

  6. WPF - Group分组对ListBox等列表样式的约束

    原文:WPF - Group分组对ListBox等列表样式的约束 在做WPF主题支持时,出现一个分组引起的莫名错误,可是折腾了我一番.在没有使用样式时,列表分组很正常,使用了别人写的ListBox列表 ...

  7. 《深入浅出WPF》笔记——绑定篇(一)

    上一节,有记录写到:在WPF里,数据驱动UI,数据占核心地位,UI次之.怎么恢复数据的核心地位,那就要先了解一下Binding. 一.Binding 基础 1.1WPF中Data Binding的带来 ...

  8. 分享Silverlight/WPF/Windows Phone一周学习导读(4月11日-4月15日)

    历时一周的MIX11结束了,一周里微软带给Web开发人员一个又一个惊喜.特别是Silverlight以及Windows Phone 7开发人员,相信Silverlight 5 Beta的推出和Mang ...

  9. WPF自学手册-读书笔记(三)小有所成

    应用程序窗口 WPF应用程序的重要两个类型是Application 和 Window,前者在一个应用程序中是全局唯一的,代表一个应用程序,它可以提供很多基础的应用程序的服务,应用程序也有生命周期. 应 ...

最新文章

  1. 巧用watch命令执行循环操作,来解放我们的双手
  2. Java基础班学习笔记(15)GUI图形界面编程
  3. etcdctl命令查询etcd信息
  4. Java24-day15(完结)【反射(类加载器、反射)、反射获取构造方法-成员变量-成员方法、模块化(概述、模块基本使用、模块服务使用)】
  5. java统计各空气质量最大值_空气质量历史数据分析
  6. java多线程遇到的问题_关于Java多线程遇到的问题.
  7. 一张图看懂华为计算全联接2020
  8. (tmp 8) 0xff;
  9. 谷歌秋季新品发布会即将召开 Pixel 4系列将正式亮相
  10. oracle 11g空表不能exp导出问题解决方案
  11. python安装教程
  12. postman安装报错 无法定位_Postman中文版
  13. Java之spilt()函数,trim()函数
  14. python调研报告总结体会_调查报告的心得体会
  15. 【Bug小记】input:-webkit-autofill:输入框自动填充背景问题
  16. 卫星运行的规律与卫星定位原理
  17. 常见的POST提交数据方式
  18. 《Adobe Photoshop大师班:高级合成的秘密》目录—导读
  19. 10堆沙子那堆沙子溶解会变色问题(二进制标记和排序标记)
  20. 【oP07CP运放电路简记】

热门文章

  1. jdbc-connect-oracle12c-pdb/cdb(jdbc连接oracle12c的pdb和cdb)
  2. C++编程思想重点笔记(下)
  3. 地址空间和虚拟内存(转载)http://topic.csdn.net/u/20090619/10/4c62a13b-536b-4b0a-af09-2271c6a104e1.html...
  4. linux bash shell之declare
  5. CIKERS Shane 20190611
  6. p2657 windy数
  7. salt '*' state.highstate 报错找不到文件,环境如下No Top file or master_tops data matches found....
  8. 对于fmri的设计矩阵构造的一个很直观的解释-by 西南大学xulei教授
  9. 匿名内部类,就是内部类的简写格式。
  10. JQ和Js获取span标签的内容