游戏攻略

WPF数据分组显示方案探讨

栏目:游戏攻略 日期: 作者:游戏资讯

在本文中,将探讨在WPF应用程序中对数据进行分组显示的两种常用方案。一种基于ICollectionView,另一种基于IGrouping。

前言

在WPF应用程序中,当需要对数据进行分组显示时,可以选择基于ICollectionView或IGrouping的两种方案。

基于ICollectionView实现

在cs代码中使用CollectionViewSource.GetDefaultView方法获取集合的默认视图,并创建PropertyGroupDescription对象,然后将其添加到ICollectionView的GroupDescriptions属性中。在xaml代码中,除了一般的数据绑定外,还添加了ListView.GroupStyle,设置了GroupStyle.HeaderTemplate。

相关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); 
}

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>

实现的效果如下所示:

基于IGrouping实现

在cs代码中使用Linq的GroupBy方法对People集合进行分组。在xaml代码中使用Expander控件,通过点击标题栏来展开或折叠其内容区域。

相关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);    
  }

相关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>

实现效果如下所示:

回顾

本文介绍了WPF应用程序中对数据进行分组显示的两种方案。一种基于ICollectionView,另一种基于IGrouping。基于ICollectionView的方案使用CollectionViewSource.GetDefaultView方法获得集合的默认视图,创建一个PropertyGroupDescription类,ICollectionView的GroupDescriptions属性添加创建的PropertyGroupDescription对象。在xaml代码中,除了一般的数据绑定外,还添加了ListView.GroupStyle,设置了GroupStyle.HeaderTemplate。基于IGrouping的方案使用Linq的GroupBy方法对People集合进行分组。在xaml代码中使用Expander控件绑定分组的Key属性,在Expander控件中再包含一个ListView控件,绑定每个分组中的数据项。

关键词:

相关资讯

  • 燕云十六声敲钟老人任务攻略

    在游戏中,玩家可以在太平钟楼找到敲钟老人并接取一个任务。完成任务后,可以获得丰厚的奖励。以下是燕云十六声敲钟老人任务的详细攻略...
  • WPF数据分组显示方案探讨

    在本文中,将探讨在WPF应用程序中对数据进行分组显示的两种常用方案。一种基于ICollectionView,另一种基于IGro...
  • 《活侠传》密密缝获得方法大全

    活侠传中,密密缝是一件非常珍贵的防具,可以大大减少受到的伤害并帮助角色回复生命值。许多玩家都渴望获得这件神器。以下是《活侠传》...
  • 《崩坏:星穹铁道》波提欧抽取建议

    崩坏星穹铁道波提欧值得抽吗?波提欧是崩坏星穹铁道中物理系的巡猎角色。立绘狂拽炫酷,在实战中拿枪打人可谓非常帅。肯定有很多玩家对...
  • 魔力宝贝复兴:末日长老树精打法攻略分享

    魔力宝贝复兴末日长老树精是主线困难关卡的BOSS,具有一定挑战性,需要掌握机制。下面带来末日长老树精打法指南,希望对小伙伴们有...
  • 《神之天平》小麦粉怎么获得

    《神之天平》是一款ARPG游戏,玩家在游戏中需要与时间和命运抗衡。其中,小麦粉是一种重要的道具,下面将详细介绍小麦粉的获...