您的位置:首页 > 其它

WPF里ItemsControl的分组实现

2018-01-24 20:12 162 查看
我们在用到ItemsControl时,有时会用到分组,如ListBox,ListView,DataGrid。WPF的ItemsControl可以实现分组,是依托于GroupStyle,以ListBox为例,他的分组效果图为:



  以下为前台:

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已放群里,需要的可以下载来看。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: