WPF里ItemsControl的分组实现 --listbox 实现分组

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

  以下为前台:

复制代码
 1 <ListBox Name="lbMain">
 2     <ListBox.ItemTemplate>
 3         <DataTemplate>
 4             <StackPanel Orientation="Horizontal">
 5                 <TextBlock Text="{Binding FileName}"
 6                            Width="150" />
 7                 <TextBlock Text="{Binding AuthorName}"
 8                            Width="100" />
 9                 <TextBlock Text="{Binding UpTime}"
10                            Width="100" />
11             </StackPanel>
12         </DataTemplate>
13     </ListBox.ItemTemplate>
14     <ListBox.GroupStyle>
15         <GroupStyle>
16             <GroupStyle.ContainerStyle>
17                 <Style TargetType="{x:Type GroupItem}">
18                     <Setter Property="Template">
19                         <Setter.Value>
20                             <ControlTemplate TargetType="{x:Type GroupItem}">
21                                 <Expander IsExpanded="True"
22                                           ExpandDirection="Down">
23                                     <Expander.Header>
24                                         <StackPanel Orientation="Horizontal">
25                                             <TextBlock Text="{Binding Path=Name}"
26                                                        VerticalAlignment="Center" />
27                                             <TextBlock Text="{Binding Path=ItemCount, StringFormat=数量:{0}}"
28                                                        VerticalAlignment="Center"
29                                                        Margin="5,0,0,0" />                                   
30                                             <Button Content="Sale"
31                                                     Margin="5,0,0,0" />
32                                         </StackPanel>
33                                     </Expander.Header>
34                                     <ItemsPresenter />
35                                 </Expander>
36                             </ControlTemplate>
37                         </Setter.Value>
38                     </Setter>
39                 </Style>
40             </GroupStyle.ContainerStyle>
41         </GroupStyle>
42     </ListBox.GroupStyle>
43 </ListBox>
复制代码

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

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

  以下是后台:

复制代码
 1 public class ModelFile
 2 {
 3     public string FileName { get; set; }
 4     public string AuthorName { get; set; }
 5     public string UpTime { get; set; }
 6 }
 7 
 8 public partial class MainWindow : Window
 9 {
10     public ObservableCollection<ModelFile> CollectionModelFile = new ObservableCollection<ModelFile>();
11 
12     public MainWindow()
13     {
14         InitializeComponent();
15 
16         CollectionModelFile.Add(new ModelFile() { FileName = "WPF进化史", AuthorName = "王鹏", UpTime = "2014-10-10" });
17         CollectionModelFile.Add(new ModelFile() { FileName = "WPF概论", AuthorName = "大飞", UpTime = "2014-10-10" });
18         CollectionModelFile.Add(new ModelFile() { FileName = "WPF之美", AuthorName = "小虫", UpTime = "2014-10-11" });
19         CollectionModelFile.Add(new ModelFile() { FileName = "WPF之道", AuthorName = "青草", UpTime = "2014-11-11" });
20         CollectionModelFile.Add(new ModelFile() { FileName = "WPF之禅", AuthorName = "得瑟鬼", UpTime = "2014-11-11" });
21         CollectionModelFile.Add(new ModelFile() { FileName = "WPF入门", AuthorName = "今晚吃什么", UpTime = "2014-11-11" });
22         CollectionModelFile.Add(new ModelFile() { FileName = "WPF神技", AuthorName = "无间道王二", UpTime = "2014-12-12" });
23         CollectionModelFile.Add(new ModelFile() { FileName = "WPF不为人知之密", AuthorName = "星期八", UpTime = "2014-12-12" });
24         CollectionModelFile.Add(new ModelFile() { FileName = "WPF之革命", AuthorName = "两把刀", UpTime = "2014-12-12" });
25 
26         lbMain.ItemsSource = CollectionModelFile;
27 
28         ICollectionView cv = CollectionViewSource.GetDefaultView(lbMain.ItemsSource);
29         cv.GroupDescriptions.Add(new PropertyGroupDescription("UpTime"));
30     }
31 }
复制代码

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

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

转载于:https://www.cnblogs.com/smiler/p/9210221.html

WPF ItemsControl控件的详细使用教程 WPF 中的 ItemsControl 是一个灵活的控件,可以显示绑定到集合的多个数据项。ItemsControl 是所有具有列表功能的控件(如 ListBox、ComboBox、TreeView 和 ListView)的基类。 阅读详情

相关推荐

WPF ItemsControl核心机制与高级应用:从数据绑定到Prism集成

在WPF框架中,数据绑定是实现数据与UI分离的核心机制,它通过建立数据源与界面元素之间的动态连接,自动同步数据变化。其原理基于依赖属性系统和INotifyPropertyChanged接口,当数据源变更时,UI能实时响应更新。这一机制的技术价值在于极大提升了开发效率与代码可维护性,实现了真正的数据驱动界面。在实际应用场景中,无论是简单的列表展示,还是复杂的动态仪表盘、聊天界面等,都需要一个灵活的数据展示容器。WPF的ItemsControl正是为此而生,它作为数据展示的基石控件,通过ItemTemplate

weixin_34221112的博客 353

WPF-ListBox分组-排序

最终效果如图:点此下载示例  分组部分代码如下:    ///     /// 你会发现根据时间分组或许不是一个好主意。因为DateTime包括日期和时间两部分,第条数据几乎都有一个唯一的值,如:2009-1-5 05:06:07,    /// 这使得很多分组都只有一项!为了修正这个问题,可以使用PropertyGroupDescription类的重载构造函数,这样就可以在把

信守承诺,雕刻寂寞 4092

WPF ListBox控件完全指南

本文介绍了WPF中的ListBox控件,涵盖了其基本用法、核心属性和功能,以及样式和模板的定制。ListBox是WPF中常用的列表展示控件,支持单项或多项选择,并具有高度的可定制性。文章首先通过XAML和C#代码展示了如何创建ListBox,并详细介绍了其核心属性,如ItemsSource、SelectionMode等。此外,还探讨了如何通过ItemTemplate和ItemContainerStyle自定义列表项的外观和样式。文章还提供了GitHub示例程序的链接,方便读者实践和参考。

冰茶的博客 2708

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

原文:WPF - Group分组对ListBox等列表样式的约束  在做WPF主题支持时,出现一个分组引起的莫名错误,可是折腾了我一番。在没有使用样式时,列表分组很正常,使用了别人写的ListBox列表样式后,发现GroupItem分组区没有内容,是空的,本篇把这一问题的解决过程给大家说一下,做主题时可以注意分组对列表样式的限制了。 ListBox增加分组   WPF为ItemsControl...

weixin_33763244的博客 433

wpf ListBox分组

wpf ListBox分组,可以展开与折叠

wpf--ListBox分组-排序

wpf--ListBox分组-排序 wpf--ListBox分组-排序

WPF控件ItemsControl、ListBox、ListView、DataGrid、TreeView、TabControl用法及区别

这些控件都是用于在WPF应用程序中呈现数据的控件。它们之间的主要区别在于其用途、功能、视觉外观和自定义选项。可以根据的需求和数据类型来选择适当的控件:如果需要简单地显示一个数据项集合,则可以使用ItemsControl或ListView;如果需要支持选择功能,则可以使用ListBox;如果需要以表格形式查看或编辑数据,则应该使用DataGrid;如果需要显示具有层次结构的数据,则应该使用TreeView;如果需要将不同视图放在不同选项卡页面上,则应该使用TabControl。

studypipi的博客 4997

计算机网络实验——入侵检测系统实验

在图1所示的网络结构中,此方案的具体实施:在路由器Router1的接口1出方向配置入侵检测策略,在收到ICMP ECHO请求包时,丢弃并同步向日志服务器报告警告,此时,终端PC2和PC3无法对终端PC0和PC1执行ping操作,并且日志服务器将记录相应的警告信息;在实验一的基础上,添加扩展分组过滤器,指定需要进行检测的信息流的类别,将扩展分组和对应的入侵检测规则进行绑定,使得只对特定的信息流进行入侵检测。加载指定类别的特征库,这里的指定类别是 ios_ips 类别中的 basic 子类别。

放放的博客 1562

别再只用ListBox了!WPF ItemsControl的隐藏功能大揭秘(附完整代码示例)

本文深入探讨了WPF ItemsControl的核心优势与隐藏功能,揭示了其作为列表控件基类的强大灵活性。通过对比ListBox,详细讲解了如何利用ItemsPanel自定义布局、使用ItemTemplateSelector实现动态模板,并涵盖分组、虚拟化等高级性能优化技巧,帮助开发者摆脱派生控件的限制,构建高度定制化的数据展示界面。

sprite的博客 778

飞牛fnOS安装1Panel后Docker容器消失?三步教你恢复数据并避免踩坑

本文详细解析了飞牛fnOS安装1Panel后Docker容器消失的问题,指出这是由于daemon.json文件被覆盖导致。通过SSH连接、修复配置文件和系统重启三个步骤,用户可以轻松恢复数据。文章还提供了预防措施和最佳实践,帮助用户避免类似问题。

yellow的专栏 869

软件测试方法——等价类划分法详解

!如果下面这些资料用得到的话可以直接拿走:1、自学开发或者测试必备的完整项目源码与环境2、测试工作中所有模板(测试计划、测试用例、测试报告等)3、软件测试经典面试题4、Python/Java自动化测试实战.pdf5、Jmeter/postman接口测试全套视频获取6、Python学习路线图。

MXB1220的博客 1万+

WPF里ItemsControl的分组实现

原文:WPF里ItemsControl的分组实现  我们在用到ItemsControl时,有时会用到分组,如ListBox,ListView,DataGrid。WPF的ItemsControl可以实现分组,是依托于GroupStyle,以ListBox为例,他的分组效果图为:   以下为前台: 1 &lt;ListBox Name="lbMain"&gt; 2 &lt;L...

weixin_34310127的博客 168

影刀RPA进阶:Excel多条件筛选与数据提取实战

本文详细介绍了如何利用影刀RPA实现Excel多条件筛选与数据提取的自动化。通过拆解文本、数值、日期及颜色筛选等核心指令,并结合实战案例,指导用户构建稳健的销售数据提取机器人,从而高效处理复杂数据报表,提升工作效率。

onion的博客 527

[WPF](小结1)ListBox嵌套ListBox

思路:大项目的每项中包含一个小项目集合,用ListBox嵌套ListBox或ListBox嵌套ItemsCtrol是个比较好的方式,现总结如下: 第一:先构建题目类,再建一个选项类,题目类集合中的每个项包含一个选项类集合,即数组嵌套数组,C#语句如下: (为方便看清语句,类直...

weixin_30268921的博客 805

mongoDB 数据莫名其妙的没了

问题 之前没有接触过mongoDB,然后接手一个项目使用的是MongoDB,我就跟着网上的教程搭建一个MongoDB的服务,并运行起来。 一开始没有啥问题,成功的把服务与MongoDB都启动以来,运行也没有问题。但是过了几天,我再次打开时发现,以前的数据神奇的消失了。我还在想,是有什么定时清除的么,还是什么原因导致崩了然后数据就被清理了。 查找原因 第一次遇到我没有在意,重启了一下MongoDB,...

技术熊的博客小窝 1万+

中国国家级地面气象站基本气象要素日值数据集(V3.0)

气温数据TEM, 包括站点编号(sid), 纬度(lat), 经度(long), 高程(elev), 年(year), 月(month),日(day), 平均气温(tmean), 最高气温(tmax), 最低气温(tmin)气压数据PRS, 包括站点编号(sid), 纬度(lat), 经度(long), 高程(elev), 年(year), 月(month),日(day), 平均气压(pmean), 最高气压(pmax), 最低气压(pmin)中国国家级地面气象站基本气象要素日值数据集(V3.0)

J_Giser的博客 3890

WPF集合控件

1、集合控件概述很多时候,我们需要显示大量的数据,这些数据虽然众多,但是数据类型结构相同的,由于内容控件只能显示单个元素,要显示或操作多个元素组成的集合,那么,集合控件就派上用场了。WPF中的集合控件种类丰富,有类似表格的DataGrid,有单列表的ListBox,也有介于两者之前的ListView,还有,软件的菜单通常也是一个集合控件,以及软件下方的状态栏,同样也是一个集合控件。这些集合控件都有一个共同的基类控件,那就是ItemsControl类,下面我们以表格的形式展示一下即将要学习的集合控件。

m0_68647295的博客 1439

SAP UI5 应用开发教程的学习目录 - 循序渐进,由浅入深,适合不同水平的 SAP UI5 开发人员

笔者在业余时间设计了这份 SAP UI5 学习教程,把开发一个完整的 SAP UI5 应用的流程,拆分成若干个步骤,力求每个步骤里,把涉及到的知识点都涵盖到。建议零基础或者对 SAP UI5 知之甚少的 SAP UI5 初学者,按照顺序从第一个步骤开始循序渐进地学习,把这些代码下载到本地,配合教程的文字讲解,自己动手,以加深理解。 对于已经有一定基础的 SAPUI5 开发人员,可以通过本文的目录,跳过前面一部分比较基础的章节,直接挑选对自己工作项目有关,或者包含某些知识点自己尚未掌握的章节来有针对性地学习。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3万+

WPF ItemsControl核心机制与六大实战场景详解

在WPF开发中,数据绑定是实现数据驱动界面的核心技术,它通过建立数据源与UI元素之间的动态连接,实现了业务逻辑与展示层的解耦。其核心原理在于利用依赖属性和通知机制,当数据发生变化时,UI能够自动响应并更新。这项技术的价值在于极大地提升了开发效率和应用程序的可维护性,是构建复杂、动态用户界面的基石。在众多应用场景中,如动态列表展示、数据可视化看板、工具栏生成等,都需要一个强大的容器控件来承载这种数据绑定与模板化渲染的能力。这正是WPF中**ItemsControl**控件的核心作用所在。它作为列表类控件的基类

weixin_33889665的博客 433

TRAE智能体开发:TRAE概述

TRAE(/treɪ/)深度融合 AI 能力,是一名能够理解需求、调用工具并独立完成各类开发任务的“AI 开发工程师”,帮助你高效推进每一个项目。

王国平的博客 1254

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: Revit二次开发: 文件损坏
下一篇: JPA、Hibernate、Spring data jpa之间的关系,终于明白了
dddp75921
博客等级 码龄12年 9粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值