WPF里ItemsControl的分组实现

2021-07-10 11:05

阅读:608

标签:ups   需要   完成   ima   listbox   一个   obs   box   font   

原文:WPF里ItemsControl的分组实现

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

技术分享图片

  以下为前台:

 1 "lbMain">
 2      3          4             "Horizontal">
 5                 "{Binding FileName}"
 6                            Width="150" />
 7                 "{Binding AuthorName}"
 8                            Width="100" />
 9                 "{Binding UpTime}"
10                            Width="100" />
11             12         13     14     15         16             17                 
40             41         42     43 

  从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 CollectionModelFile = new ObservableCollection();
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已放群里,需要的可以下载来看。

WPF里ItemsControl的分组实现

标签:ups   需要   完成   ima   listbox   一个   obs   box   font   

原文地址:https://www.cnblogs.com/lonelyxmas/p/9688570.html


评论


亲,登录后才可以留言!