码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • WPF/C#:如何将数据分组显示


    本文介绍了在WPF/C#中如何分组显示数据。
    合集 - C#(46)
    1.使用C#将几个Excel文件合并去重分类2023-11-152.C#使用SqlSugar操作MySQL数据库实现简单的增删改查2023-11-163.C#中的类和继承2023-11-174.C#中的virtual和override关键字2023-11-175.C#中的属性2023-11-206.C#winform中使用SQLite数据库2023-11-237.C#简化工作之实现网页爬虫获取数据2023-11-278.C#中的委托(一)2023-11-299.C#中的ref关键字2023-11-2910.C#中out关键字2023-11-2911.C#中内置的泛型委托Func与Action2023-12-0412.在winform blazor hybrid中绘图2023-12-1313.使用C#如何监控选定文件夹中文件的变动情况?2023-12-2814.C#设计模式之策略模式01-0215.由浅入深理解C#中的事件01-0416.C#设计模式之观察者模式01-0417.C#设计模式之单例模式01-0818.C#基于ScottPlot进行可视化01-1319.C#使用MiniExcel导入导出数据到Excel/CSV文件02-1020.winform实现最小化至系统托盘02-1921.C#使用Bogus生成测试数据02-2722.SemanticKernel如何基于自有数据聊天03-0523.在winform中如何嵌入第三方软件窗体✨03-0724.在winform中如何实现双向数据绑定?03-1825.自己动手做一个批量doc转换为docx文件的小工具03-2026.WPF中动画教程(DoubleAnimation的基本使用)04-0127.WPF动画教程(PointAnimationUsingPath的使用)04-0328.C#使用PaddleOCR进行图片文字识别✨04-0929.WPF基础:在Canvas上绘制图形04-1630.WPF/C#:让绘制的图形可以被选中并将信息显示在ListBox中04-1931.使用归一化盒过滤器对图像进行平滑处理04-2032.WPF/C#:如何显示具有层级关系的数据04-2233.将彩色图转化为灰度图及其原理介绍04-2334.WPF/C#:ProgressBar的基本使用05-0835.在VB.NET项目中使用C#编写的代码05-2136.WPF/C#:理解与实现WPF中的MVVM模式05-2837.SemanticKernel:添加插件06-0638.Avalonia:一个.NET跨平台UI框架06-1039.WPF/C#:异常处理06-1240.WPF/C#:程序关闭的三种模式06-1241.wpfui:一个开源免费具有现代化设计趋势的WPF控件库06-13
    42.WPF/C#:如何将数据分组显示06-17
    43.WPF/C#:更改界面的样式06-1744.LiveCharts2:简单灵活交互式且功能强大的.NET图表库06-1845.WPF/C#:显示分组数据的两种方式06-1946.WPF/C#:在DataGrid中显示选择框06-20
    收起

    WPF Samples中的示例

    在WPF Samples中有一个关于Grouping的Demo。

    该Demo结构如下:

    image-20240617105742146

    MainWindow.xaml如下:

    
        
    
            
                
                    
                        
                            
                                Pick up Groceries and Detergent
                            
                            
                                Do Laundry
                            
                            
                                Email Clients
                            
                            
                                Clean my office
                            
                            
                                Get ready for family reunion
                            
                            
                                Review new budget proposals
                            
                        
                    
                
            
    
            
            Group by task type
            
                
                    
                        
                            
                        
                        
                            
                            
                                
                                
                            
                        
                    
                
                
                    
                
                
                    
                        
                            
                                
                            
                        
                    
                
            
        
    
    
    

    其中:

     
                
                    
                        
                            
                                Pick up Groceries and Detergent
                            
                            
                                Do Laundry
                            
                            
                                Email Clients
                            
                            
                                Clean my office
                            
                            
                                Get ready for family reunion
                            
                            
                                Review new budget proposals
                            
                        
                    
                
            
    

    使用XmlDataProvider来加载和绑定XML数据。

     
    

    将MyTasks绑定到ItemsControl。

     
                        
                            
                        
                        
                            
                            
                                
                                
                            
                        
                    
    

    设置数据模板。

    跟本次介绍的主题Grouping有关的内容如下:

     
        
             
                 
                       
                  
              
         
     
    

    image-20240617110520481

    ItemsControl.GroupStyle获取定义每个级别的组的外观的 GroupStyle 对象集合。

    GroupStyle如下所示:

        public class GroupStyle : INotifyPropertyChanged
        {
           
            public static readonly ItemsPanelTemplate DefaultGroupPanel;       
            public GroupStyle();
            public static GroupStyle Default { get; }
            [DefaultValue(0)]
            public int AlternationCount { get; set; }    
            [DefaultValue(null)]
            public Style ContainerStyle { get; set; }
            [DefaultValue(null)]
            public StyleSelector ContainerStyleSelector { get; set; }
            [DefaultValue(null)]
            public string HeaderStringFormat { get; set; }
            [DefaultValue(null)]
            public DataTemplate HeaderTemplate { get; set; }     
            [DefaultValue(null)]
            public DataTemplateSelector HeaderTemplateSelector { get; set; }
            [DefaultValue(false)]
            public bool HidesIfEmpty { get; set; }
            public ItemsPanelTemplate Panel { get; set; }
            protected event PropertyChangedEventHandler PropertyChanged;
            protected virtual void OnPropertyChanged(PropertyChangedEventArgs e);
        }
    }
    

    这里设置了GroupStyle.HeaderTemplate,这个元素定义了分组头的数据模板。数据模板决定了分组头的具体显示方式。

     
    

    这里的Name指的是CollectionViewGroup 类的Name属性。

    image-20240617123709245

    CollectionViewGroup 类表示根据 GroupDescriptions 由 CollectionView 对象创建的组。

    MainWindow.cs如下:

     public partial class MainWindow : Window
     {
         private CollectionView _myView;
    
         public MainWindow()
         {
             InitializeComponent();
         }
    
         private void AddGrouping(object sender, RoutedEventArgs e)
         {
             _myView = (CollectionView) CollectionViewSource.GetDefaultView(myItemsControl.ItemsSource);
             if (_myView.CanGroup)
             {
                 var groupDescription
                     = new PropertyGroupDescription("@Type");
                 _myView.GroupDescriptions.Add(groupDescription);
             }
         }
    
         private void RemoveGrouping(object sender, RoutedEventArgs e)
         {
             _myView = (CollectionView) CollectionViewSource.GetDefaultView(myItemsControl.ItemsSource);
             _myView.GroupDescriptions.Clear();
         }
     }
    

    只包含两个事件处理程序。

    进行分组是这样写的:

     private void AddGrouping(object sender, RoutedEventArgs e)
         {
             _myView = (CollectionView) CollectionViewSource.GetDefaultView(myItemsControl.ItemsSource);
             if (_myView.CanGroup)
             {
                 var groupDescription
                     = new PropertyGroupDescription("@Type");
                 _myView.GroupDescriptions.Add(groupDescription);
             }
         }
    
    _myView = (CollectionView) CollectionViewSource.GetDefaultView(myItemsControl.ItemsSource);
    

    虽然CollectionViewSource本身不是一个静态类,但它提供了一个静态方法GetDefaultView,这个方法用于获取与特定数据源关联的默认视图。这种设计允许开发者不必实例化CollectionViewSource对象就能访问和操作数据源的视图。

    image-20240617112246415

     var groupDescription
         = new PropertyGroupDescription("@Type");
     _myView.GroupDescriptions.Add(groupDescription);
    

    image-20240617112656587

    PropertyGroupDescription类描述使用属性名作为条件对项进行分组。

    使用的是这个构造函数:

    image-20240617112830520

      = new PropertyGroupDescription("@Type");
    

    在XML和XPath的上下文中,@符号用于引用元素的属性。

    这样就实现了基于Type属性进行分组。

      private void RemoveGrouping(object sender, RoutedEventArgs e)
      {
          _myView = (CollectionView) CollectionViewSource.GetDefaultView(myItemsControl.ItemsSource);
          _myView.GroupDescriptions.Clear();
      }
    

    取消分组将_myView.GroupDescriptions清空即可。

    该Demo的效果如下:

    分组效果

    分组前:

    image-20240617113824832

    分组后:

    image-20240617113842413

    代码来源

    [WPF-Samples/Data Binding/Grouping at main · microsoft/WPF-Samples (github.com)]

    欢迎关注微信公众号:DotNet学习交流。

  • 相关阅读:
    Python基于Windows版微信做一个聊天机器人
    未来趋势:算法备案法规的演进与展望
    深入浅出RPC原理
    408. Valid Word Abbreviation
    开源工具系列7:Kube-bench
    玩转SQLite7:基本语法与数据类型
    【STM32】STM32H750VBT6 CubeMX USBFS-UVC设备实现,以及移植问题
    Java内置注解用法、自定义注解
    【无标题】
    认识NR(零):MIMO-OFDM中的信道关系
  • 原文地址:https://www.cnblogs.com/mingupupu/p/18252701
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号