狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

WPF/C#:顯示分組數據的兩種方式ICollectionView和IGrouping

freeflydom
2024年6月20日 11:26 本文熱度 1196

基于ICollectionView實現

相關cs代碼:

[ObservableProperty]

private ObservableCollection<People> people;


public GroupDemoViewModel()

{

    People = new ObservableCollection<People>

    {

        new People { Name = "小一", Class = "1班" },

        new People { Name = "小二", Class = "2班" },

        new People { Name = "王五", Class = "1班" },

        new People { Name = "小紅", Class = "2班" },

        new People { Name = "小綠", Class = "1班" },

        new People { Name = "小剛", Class = "2班" },

    };

   

    MyView = CollectionViewSource.GetDefaultView(People);

    var groupDescription

        = new PropertyGroupDescription("Class");

    MyView.GroupDescriptions.Add(groupDescription); 

}

這段代碼使用了WPF中的CollectionViewSourcePropertyGroupDescription類來對數據進行分組。

CollectionViewSource是一個用于提供數據視圖的類,它允許你對數據進行排序、篩選和分組。

GetDefaultView方法返回一個默認視圖,該視圖是對People集合的包裝。這個視圖可以用于在UI中顯示數據,并且可以應用各種視圖操作(如排序、篩選和分組)。

PropertyGroupDescription是一個用于定義分組規則的類。這里創建了一個新的PropertyGroupDescription對象,并指定分組依據的屬性為Class,這意味著數據將根據這意味著數據將根據People集合中每個對象的Class屬性值進行分組。

xaml相關代碼:

<ui:ListView ItemsSource="{Binding MyView}">

    <ui:ListView.ItemTemplate>

        <DataTemplate >

            <StackPanel Orientation="Horizontal">

                <TextBlock Text="{Binding Name}" Margin="5"/>

                <TextBlock Text="{Binding Class}" Margin="5"/>

            </StackPanel>

        </DataTemplate>

    </ui:ListView.ItemTemplate>

    <ui:ListView.GroupStyle>

        <GroupStyle>

            <GroupStyle.HeaderTemplate>

                <DataTemplate>

                    <TextBlock Text="{Binding Name}" FontWeight="Bold" FontSize="16"/>

                </DataTemplate>

            </GroupStyle.HeaderTemplate>

        </GroupStyle>

    </ui:ListView.GroupStyle>

</ui:ListView>

GroupStyleGroupStyle.HeaderTemplate是用來自定義分組頭部的顯示方式。

GroupStyle: 這是一個用于定義分組樣式的元素。它允許你為ui:ListView中的每個分組自定義外觀和行為。在這個元素內部,你可以定義頭部模板(HeaderTemplate)、容器樣式(ContainerStyle)等。
GroupStyle.HeaderTemplate: 這個元素定義了分組頭部的模板。通過這個模板,你可以自定義分組頭部的外觀。

實現的效果如下所示:

基于IGrouping實現

在將數據分組時,我個人比較喜歡使用Linq的GroupBy。

相關cs代碼如下:

  [ObservableProperty]

  private ObservableCollection<People> people;


  public IEnumerable<IGrouping<string?,People>> GroupedPeople { get; set; }


  public GroupDemoViewModel()

  {

      People = new ObservableCollection<People>

      {

          new People { Name = "小一", Class = "1班" },

          new People { Name = "小二", Class = "2班" },

          new People { Name = "王五", Class = "1班" },

          new People { Name = "小紅", Class = "2班" },

          new People { Name = "小綠", Class = "1班" },

          new People { Name = "小剛", Class = "2班" },

      };


      GroupedPeople = People.GroupBy(x => x.Class);    

  }

 GroupedPeople = People.GroupBy(x => x.Class); 

這行代碼使用LINQ的GroupBy方法對People集合進行分組。

GroupBy(x => x.Class)的作用是根據People對象的Class屬性的值將這個集合分成多個組。每個組是一個包含有相同Class值的People對象集合。這里的x代表People集合中的每一個People對象,x => x.Class是一個lambda表達式,指定了分組的依據是People對象的Class屬性。

GroupBy方法的結果是一個IEnumerable<IGrouping<string?, People>>類型的對象。IGrouping<string?, People>接口表示一個分組,其中string?是分組鍵的類型(在這個例子中是Class屬性的類型),People是集合中元素的類型。每個IGrouping<string?, People>對象包含一個鍵(Key屬性,即Class的值)和一個集合(包含所有具有該Class值的People對象)。

相關xaml代碼如下:

 <ui:ListView ItemsSource="{Binding GroupedPeople}">

     <ui:ListView.ItemTemplate>

         <DataTemplate >

             <Expander Header="{Binding Key}">

                 <ui:ListView ItemsSource="{Binding}">

                     <ItemsControl.ItemTemplate>

                         <DataTemplate>

                             <StackPanel Orientation="Horizontal">

                                 <TextBlock Text="{Binding Name}" Margin="5"/>

                                 <TextBlock Text="{Binding Class}" Margin="5"/>

                             </StackPanel>

                         </DataTemplate>

                     </ItemsControl.ItemTemplate>

                 </ui:ListView>

             </Expander>

         </DataTemplate>

     </ui:ListView.ItemTemplate>

 </ui:ListView>

使用了Expander控件。

Expander是WPF中的一個控件,中文通常翻譯為“擴展器”或“可折疊控件”。它是一個容器控件,允許用戶通過點擊標題欄來展開或折疊其內容區域。這種控件在用戶界面設計中非常有用,可以用來隱藏或顯示詳細信息,從而節省屏幕空間。

實現效果如下所示:

回顧

本文介紹了遇到WPF對數據進行分組顯示的需求時,可以選擇的兩種方案。一種方案基于ICollectionView,另一種方案基于IGrouping

基于ICollectionView的方案,在cs代碼中通過CollectionViewSource.GetDefaultView方法獲得集合的默認視圖,創建一個PropertyGroupDescription類,ICollectionViewGroupDescriptions屬性添加創建的PropertyGroupDescription對象。在xaml代碼中,除了一般的數據綁定外,還添加了ListView.GroupStyle,設置了GroupStyle.HeaderTemplate

基于IGrouping的方案,在cs代碼中,使用LinqGroupBy方法對People集合進行分組。在xaml代碼中在ListView的數據模板中使用Expander控件綁定分組的Key屬性,在Expander控件中再包含一個ListView控件,綁定每個分組中的數據項。


轉自https://www.cnblogs.com/mingupupu/p/18256035



該文章在 2024/6/20 11:26:48 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved