Windows Community Toolkit 4.0 - DataGrid - Overview

news/2024/7/20 15:50:02 标签: ui, 内存管理
原文: Windows Community Toolkit 4.0 - DataGrid - Overview

概述

Windows Community Toolkit 4.0 于 2018 月 8 月初发布:Windows Community Toolkit 4.0 Release Note. 4.0 版本相较于 3.0,增加了 DataGrid 等控件,Sample App 支持了 Fluent Design 设计和明暗两种风格,修复了遗留的控件 BUG,接下来我们主要看一下 DataGrid 控件的实现。

DataGrid 控件是一个可以展示多行多列数据集合的控件,相信大家在 Silverlight WPF 等平台开发中都有过接触,该控件非常适合用来展示数据表格,可以完全是文本内容展示,也可以在数据中包含按钮等操作;另外控件还支持筛选,分组等操作需求。

由于 DataGrid 控件涉及到的功能比较复杂,代码量也比较大,我们会分为几篇文章来详细讲解。而本篇,我们会先针对 DataGrid 控件的整体实现和使用做介绍。

下面是 Windows Community Toolkit Sample App 的示例截图和 code/doc 地址:

Windows Community Toolkit Doc - DataGrid

Windows Community Toolkit Source Code - DataGrid

Namespace: Microsoft.Toolkit.Uwp.UI.Controls; Nuget: Microsoft.Toolkit.Uwp.UI.Controls.DataGrid;

 

开发过程

代码结构分析

本篇我们先对 DataGrid 的整体代码结构做概览分析,后续会分几篇文章来分析每个重要的类和方法实现。来看一下 DataGrid 的代码结构:

可以看到,DataGrid 的代码结构上是一整个 Project,而在 Nuget 上也能体现。接下看一下几个文件夹的组成和其中重要的类:

1. CollectionViews 

CollectionViews 是 DataGrid 的数据部分,可以看到 CollectionView 是基类,EnumerableCollectionView 和 ListCollectionView 继承自它,而这两个类分别代表枚举类的集合,以及列表类的集合。这两个类,都会在 DataGrid 获取数据源时被使用到。

 

2. Utilities

Utilities 是 DataGrid 控件的基础类和帮助类集合,可以看到涉及到绑定,数值相等(接近)判断,扩展功能,索引值映射,键盘帮助类,值范围,类型帮助类,UI 设置帮助类,校验类,可视状态类和内存管理监听类;后面我们会详细讲解每个类的重点实现部分。

3. DataGrid

DataGrid 控件的最重要实现在 DataGrid 文件夹中,一共有 50 多个类。我们可以先看一遍这里类的大致作用,后面会详细讲解每个类的代码实现:

  • Automation - DataGrid 控件的动画实现
  • DataGrid,DataGridColumn,DataGridRow,DataGridCell 控件类,控件头,基于这些类的实现类;
  • DataGrid,DataGridColumn,DataGridRow,DataGridCell 相关事件处理类;
  • DataGrid,DataGridColumn,DataGridRow,DataGridCell 相关数据类;

调用示例

我们来看一下 DataGrid 控件的调用方式,先看一下 XAML 的简单实现:

xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"

<controls:DataGrid x:Name="dataGrid1" 
    Height="600" Margin="12"
    AutoGenerateColumns="True"
    ItemsSource="{x:Bind MyViewModel.Customers}" />

接着看一下数据源的简单代码:

public class Customer
{
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public String Address { get; set; }
    public Boolean IsNew { get; set; }

    public Customer(String firstName, String lastName, 
        String address, Boolean isNew)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Address = address;
        this.IsNew = isNew; 
    }

    public static List<Customer> Customers()
    {
        return new List<Customer>(new Customer[4] {
            new Customer("A.", "Zero", 
                "12 North Third Street, Apartment 45", 
                false), 
            new Customer("B.", "One", 
                "34 West Fifth Street, Apartment 67", 
                false),
            new Customer("C.", "Two", 
                "56 East Seventh Street, Apartment 89", 
                true),
            new Customer("D.", "Three", 
                "78 South Ninth Street, Apartment 10", 
                true)
        });
    }
}

看一下运行结果:

 

总结

到这里我们就把 Windows Community Toolkit 4.0 中的 DataGrid 概览和代码整体结构讲解完成了,希望能对大家更好的理解和使用这个功能有所帮助。后续会对该控件做系列的详细讲解。

最后,再跟大家安利一下 WindowsCommunityToolkit 的官方微博:https://weibo.com/u/6506046490, 大家可以通过微博关注最新动态。

衷心感谢 WindowsCommunityToolkit 的作者们杰出的工作,感谢每一位贡献者,Thank you so much, ALL WindowsCommunityToolkit AUTHORS !!!


http://www.niftyadmin.cn/n/960311.html

相关文章

【论文阅读】3D点云 -- PointConv: Deep Convolutional Networks on 3D Point Clouds

Abstract 与在规则密集网格中表示的图像不同&#xff0c;三维点云是不规则和无序的&#xff0c;因此对其应用卷积可能很困难。 在本文中&#xff0c;我们将动态卷积扩展到一种新的卷积运算&#xff0c;名为PointConv。PointConv可以应用于点云&#xff0c;以构建深度卷积网络。…

consul 整合多个数据节点

为什么80%的码农都做不了架构师&#xff1f;>>> 3个节点&#xff1a; 这里在我的测试环境,模拟一下外网IP qcloud 10.0.1.86aliyun 10.0.1.87aws 10.0.1.88启动consul的边界节点 -node 为节点取名 -bind 绑定的IP -advertise-wan 通告自己的IP(外网IP),consul…

【yolov5系列】yolov5 v6.0 环境配置、图片视频测试、模型可视化、v6.0的更新内容

1 环境安装、工程下载 工程链接&#xff1a;https://github.com/ultralytics/yolov5   工程环境配置记录&#xff1a; 本人电脑已有环境&#xff1a;ubuntu18、cuda10.0、anaconda 创建虚拟环境并激活 conda create -n yolov5 python3.6 source activate yolov5 下载工程并安…

SDUT 3362 数据结构实验之图论六:村村通公路

数据结构实验之图论六&#xff1a;村村通公路 Time Limit: 1000 ms Memory Limit: 65536 KiBProblem Description 当前农村公路建设正如火如荼的展开&#xff0c;某乡镇政府决定实现村村通公路&#xff0c;工程师现有各个村落之间的原始道路统计数据表&#xff0c;表中列出了各…

python解压rar、zip压缩包

类型模块说明gzgizp通常仅仅能压缩一个文件。与tar结合起来就能够实现先打包&#xff0c;再压缩。tartarfilelinux系统下的打包工具。仅仅打包。不压缩tgzgizp/tarfile即tar.gz。先用tar打包&#xff0c;然后再用gz压缩得到的文件zipzipfile不同于gzip。尽管使用相似的算法&…

ubuntu中C++工程打包所有依赖的so文件

1. 方法介绍 工程中已经通过CMakeLists.txt编译好了可执行文件并且能够顺利运行&#xff0c;build下内容如图 其中demo是编译好的可执行文件&#xff0c;我们要查看它依赖的库的so文件&#xff0c;在该路径下运行命令为&#xff1a;ldd ./demo 终端上输出的信息&#xff0c;就…

人工智能在模拟空战中击落人类飞行员

据美国辛辛那提大学官方网站6月27日消息&#xff0c;该校所开发的人工智能通过了专家评估&#xff0c;并在空战模拟器当中击败了有着丰富经验的退役美国空军上校基恩李。该人工智能名为“阿尔法”。在模拟空战中落败的基恩李上校表示&#xff1a;“这是我见过的最具侵略性、敏捷…

【论文阅读--实时语义分割】BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation

前言 在当前的计算机视觉领域&#xff0c;语义分割是一项基本任务&#xff0c;比较常见的就是deeplab系列。deeplab 系列是 谷歌公司 完成的&#xff0c;包括了deeplabv1 (2015)、deeplabv2 (2017)、deeplabv3 (2017)、deeplabv3 (2018)&#xff0c;其中deeplabv3效果最好。但效…