WPF里ItemsControl的分组实现
原文:WPF里ItemsControl的分組實現(xiàn)
我們在用到ItemsControl時,有時會用到分組,如ListBox,ListView,DataGrid。WPF的ItemsControl可以實現(xiàn)分組,是依托于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=數(shù)量:{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定義的是控件內(nèi)部樣式,所以有人嘗試在這里綁實體數(shù)據(jù)屬性的話肯定是失敗的,注意25行只能是Name,不管分組的屬性叫什么名,這都只能是Name,我寫了個Button在里面,如果想知道為什么只能是Name,寫個Click處理,把Button的DataContext打印出來就什么都知道了。如果想在這里做更多的處理,比如進行一些負責(zé)的運算,可以寫加轉(zhuǎn)換器。
這里只是弄了一個原始的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未來之路 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/9688570.html
總結(jié)
以上是生活随笔為你收集整理的WPF里ItemsControl的分组实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数式编程之-bind函数
- 下一篇: 第四篇 前端学习之JQuery基础