WPF里ItemsControl的分组实现
2018-01-24 20:12
162 查看
我们在用到ItemsControl时,有时会用到分组,如ListBox,ListView,DataGrid。WPF的ItemsControl可以实现分组,是依托于GroupStyle,以ListBox为例,他的分组效果图为:
以下为前台:
从16行可以看出,GroupStyle定义的是控件内部样式,所以有人尝试在这里绑实体数据属性的话肯定是失败的,注意25行只能是Name,不管分组的属性叫什么名,这都只能是Name,我写了个Button在里面,如果想知道为什么只能是Name,写个Click处理,把Button的DataContext打印出来就什么都知道了。如果想在这里做更多的处理,比如进行一些负责的运算,可以写加转换器。
这里只是弄了一个原始的Expander装载分组控件,需要美化可以另写样式。
以下是后台:
重点是28、29行,有了这两句,ListBox就能准确得分组显示了,其他ItemsControl的分组类同。
至此一个简单的ListBox分组显示就完成了,Demo已放群里,需要的可以下载来看。
以下为前台:
1<ListBoxName="lbMain"> 2<ListBox.ItemTemplate> 3<DataTemplate> 4<StackPanelOrientation="Horizontal"> 5<TextBlockText="{BindingFileName}" 6Width="150"/> 7<TextBlockText="{BindingAuthorName}" 8Width="100"/> 9<TextBlockText="{BindingUpTime}" 10Width="100"/> 11</StackPanel> 12</DataTemplate> 13</ListBox.ItemTemplate> 14<ListBox.GroupStyle> 15<GroupStyle> 16<GroupStyle.ContainerStyle> 17<StyleTargetType="{x:TypeGroupItem}"> 18<SetterProperty="Template"> 19<Setter.Value> 20<ControlTemplateTargetType="{x:TypeGroupItem}"> 21<ExpanderIsExpanded="True" 22ExpandDirection="Down"> 23<Expander.Header> 24<StackPanelOrientation="Horizontal"> 25<TextBlockText="{BindingPath=Name}" 26VerticalAlignment="Center"/> 27<TextBlockText="{BindingPath=ItemCount,StringFormat=数量:{0}}" 28VerticalAlignment="Center" 29Margin="5,0,0,0"/> 30<ButtonContent="Sale" 31Margin="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装载分组控件,需要美化可以另写样式。
以下是后台:
1publicclassModelFile 2{ 3publicstringFileName{get;set;} 4publicstringAuthorName{get;set;} 5publicstringUpTime{get;set;} 6} 7 8publicpartialclassMainWindow:Window 9{ 10publicObservableCollection<ModelFile>CollectionModelFile=newObservableCollection<ModelFile>(); 11 12publicMainWindow() 13{ 14InitializeComponent(); 15 16CollectionModelFile.Add(newModelFile(){FileName="WPF进化史",AuthorName="王鹏",UpTime="2014-10-10"}); 17CollectionModelFile.Add(newModelFile(){FileName="WPF概论",AuthorName="大飞",UpTime="2014-10-10"}); 18CollectionModelFile.Add(newModelFile(){FileName="WPF之美",AuthorName="小虫",UpTime="2014-10-11"}); 19CollectionModelFile.Add(newModelFile(){FileName="WPF之道",AuthorName="青草",UpTime="2014-11-11"}); 20CollectionModelFile.Add(newModelFile(){FileName="WPF之禅",AuthorName="得瑟鬼",UpTime="2014-11-11"}); 21CollectionModelFile.Add(newModelFile(){FileName="WPF入门",AuthorName="今晚吃什么",UpTime="2014-11-11"}); 22CollectionModelFile.Add(newPropertyGroupDescription("UpTime")); }
31}
重点是28、29行,有了这两句,ListBox就能准确得分组显示了,其他ItemsControl的分组类同。
至此一个简单的ListBox分组显示就完成了,Demo已放群里,需要的可以下载来看。
相关文章推荐
- wpf Datagrid 实现聚合分组
- WPF实现ListView大小图标和分组
- 在WPF中使用ItemsControl控件来实现线状图控件(一)
- [转]WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组
- WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组
- 在WPF中使用ItemsControl控件来实现线状图控件(一)
- 【WPF】实现QQ中的分组面板
- 【WPF】实现QQ中的分组面板(2)——添加动画
- WPF下Itemscontrol分组 样式
- WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组
- WPF 通过行为在xaml上控制itemscontrol(listbox,listview等)的排序分组
- WPF—QQ界面(五):QQ好友分组列表的效果实现 及 截稿
- c#,利用WPF的ScaleTransform和TranslateTransform实现图片的缩放效果
- wpf下实现图片的放大缩小和平移
- C# WPF 实现鼠标固定在指定范围内运动
- 准备.Net转前端开发-WPF界面框架那些事,UI快速实现法
- Winform中GridView分组排序实现功能
- WPF 实现水纹效果
- 如何实现具有层次结构的 TreeView <四> (WPF/TreeView/Style/Template)
- 通讯录的原型实现(二)- 类似QQ好友列表实现,分组名悬浮在最顶部