欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

WPF/C#:顯示分組數(shù)據(jù)的兩種方式ICollectionView和IGrouping

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

基于ICollectionView實(shí)現(xiàn)

相關(guān)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類來對(duì)數(shù)據(jù)進(jìn)行分組。

CollectionViewSource是一個(gè)用于提供數(shù)據(jù)視圖的類,它允許你對(duì)數(shù)據(jù)進(jìn)行排序、篩選和分組。

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

PropertyGroupDescription是一個(gè)用于定義分組規(guī)則的類。這里創(chuàng)建了一個(gè)新的PropertyGroupDescription對(duì)象,并指定分組依據(jù)的屬性為Class,這意味著數(shù)據(jù)將根據(jù)這意味著數(shù)據(jù)將根據(jù)People集合中每個(gè)對(duì)象的Class屬性值進(jìn)行分組。

xaml相關(guān)代碼:

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

實(shí)現(xiàn)的效果如下所示:

基于IGrouping實(shí)現(xiàn)

在將數(shù)據(jù)分組時(shí),我個(gè)人比較喜歡使用Linq的GroupBy。

相關(guān)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方法對(duì)People集合進(jìn)行分組。

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

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

相關(guān)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中的一個(gè)控件,中文通常翻譯為“擴(kuò)展器”或“可折疊控件”。它是一個(gè)容器控件,允許用戶通過點(diǎn)擊標(biāo)題欄來展開或折疊其內(nèi)容區(qū)域。這種控件在用戶界面設(shè)計(jì)中非常有用,可以用來隱藏或顯示詳細(xì)信息,從而節(jié)省屏幕空間。

實(shí)現(xiàn)效果如下所示:

回顧

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

基于ICollectionView的方案,在cs代碼中通過CollectionViewSource.GetDefaultView方法獲得集合的默認(rèn)視圖,創(chuàng)建一個(gè)PropertyGroupDescription類,ICollectionViewGroupDescriptions屬性添加創(chuàng)建的PropertyGroupDescription對(duì)象。在xaml代碼中,除了一般的數(shù)據(jù)綁定外,還添加了ListView.GroupStyle,設(shè)置了GroupStyle.HeaderTemplate

基于IGrouping的方案,在cs代碼中,使用LinqGroupBy方法對(duì)People集合進(jìn)行分組。在xaml代碼中在ListView的數(shù)據(jù)模板中使用Expander控件綁定分組的Key屬性,在Expander控件中再包含一個(gè)ListView控件,綁定每個(gè)分組中的數(shù)據(jù)項(xiàng)。


轉(zhuǎn)自https://www.cnblogs.com/mingupupu/p/18256035



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