概述

DataGrid是最常用的一种列表数据展现控件,本文介绍DataGrid的一些常用操作,包括:展示、新增、删除、修改等。以下代码基于Stylet框架实现。

数据展示

DataGrid用于对象列表的展示,我们先定义一个对象DataRecord

    public class DataRecord
{
public bool IsChecked { get; set; }
public DateTime Time { get; set; }
public string Title { get; set; }
public RecordType RecordType { get; set; }
public string ImagePath => RecordType == RecordType.File ? "/Images/File.png" : "/Images/Folder.png";
public double Size { get; set; }
public bool IsTooLarger => Size > 100;
public object Tag { get; set; }
public override string ToString()
{
return Title;
}
}

后台我们要建两个对象,一个是DataRecord的列表,一个是被选中的DataRecord对象。

public class PageDataGridViewModel : Screen
{
protected override void OnInitialActivate()
{
base.OnInitialActivate();
InitList();
} public BindableCollection<DataRecord> DataRecordList { get; set; }
public DataRecord SelectedDataRecord { get; set; }
}

注意DataRecordList 的类型为BindableCollection<DataRecord> 而不是List<DataRecord>,BindableCollection类是Stylet框架自带的一个列表类型,当用户在操作该控件时,它会发NotifyOfPropertyChange事件给View端。

InitList代码如下:

      private void InitList()
{
DataRecordList = new BindableCollection<DataRecord>()
{
new DataRecord()
{
Title="Hello",
Size=10,
RecordType= RecordType.Folder
},
new DataRecord()
{
Title="World",
Size=100.122323232,
RecordType= RecordType.Folder
},
new DataRecord()
{
Title="Hehe",
Size=200,
RecordType= RecordType.File,
IsChecked=true
}
};
}

设计端代码如下:

               <DataGrid  AutoGenerateColumns="False"
ItemsSource="{Binding DataRecordList}"
SelectedItem="{Binding SelectedDataRecord}">
<DataGrid.Columns>
<DataGridTextColumn Width="150" Header="Reocrd Time" Binding="{Binding Time,StringFormat='yyyy-MM-dd HH:mm:ss'}" IsReadOnly="True"/>
<DataGridTextColumn Width="150" Header="Title" Binding="{Binding Title}"/>
</DataGrid.Columns>
</DataGrid>

这样,一个简单的列表就完成了。

新增、删除、修改

        public void AddNew()
{
DataRecordList.Add(new DataRecord()
{
Time = DateTime.Now,
Title="New Item",
});
} public void Remove()
{
DataRecordList.Remove(SelectedDataRecord);
} public void Update()
{
SelectedDataRecord.Title = "Updated";
SelectedDataRecord.Time = DateTime.Now;
DataRecordList.Refresh();
}

当新增或删除数据时,前端会直接变化,如果是修改数据,需要人为调用BindableCollection类的Refresh()方法。

一些常用操作

1、通过数据控制字段显示样式

                        <DataGridTextColumn Width="80" Header="Size" Binding="{Binding Size,StringFormat='0.00'}">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource MahApps.Styles.DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsTooLarger}" Value="True">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>

2、通过数据模板显示图片

                        <DataGridTemplateColumn Width="30">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding ImagePath}" Width="25" Height="25" Margin="2"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

3、通过数据模板显示CheckBox

                        <DataGridTemplateColumn Header="">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

当用户修改了CheckBox状态后,后台也能读取到选中的状态。

4、显示下拉框

<DataGridComboBoxColumn Header="Type" Width="80" 
              SelectedItemBinding="{Binding RecordType}"
              ItemsSource="{Binding Source={StaticResource RecordTypeEnumKey}}" />

资源

系列目录:WPF开发快速入门【0】前言与目录

代码下载:Learn WPF: WPF学习笔记 (gitee.com)

WPF开发快速入门【5】DataGrid的使用的更多相关文章

  1. WPF开发快速入门【7】WPF的拖放功能(Drag and Drop)

    概述 本文描述WPF的拖放功能(Drag and Drop). 拖放功能涉及到两个功能,一个就是拖,一个是放.拖放可以发生在两个控件之间,也可以在一个控件自己内部拖放.假设界面上有两个控件,一个Tre ...

  2. Transform组件C#游戏开发快速入门

    Transform组件C#游戏开发快速入门大学霸 组件(Component)可以看作是一类属性的总称.而属性是指游戏对象上一切可设置.调节的选项,如图2-8所示.本文选自C#游戏开发快速入门大学霸   ...

  3. HealthKit开发快速入门教程之HealthKit数据的操作

    HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知道 ...

  4. HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID

    HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID HealthKit开发准备工作 在开发一款HealthKit应用程序时,首先需要讲解HealthKit中有哪些类,在i ...

  5. HealthKit开发快速入门教程之HealthKit开发概述简介

    HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为“He ...

  6. Apple Watch开发快速入门教程

     Apple Watch开发快速入门教程  试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...

  7. 游戏控制杆OUYA游戏开发快速入门教程

    游戏控制杆OUYA游戏开发快速入门教程 1.2.2  游戏控制杆 游戏控制杆各个角度的视图,如图1-4所示,它的硬件规格是本文选自OUYA游戏开发快速入门教程大学霸: 图1-4  游戏控制杆各个角度的 ...

  8. SpringBoot开发快速入门

    SpringBoot开发快速入门 目录 一.Spring Boot 入门 1.Spring Boot 简介 2.微服务 3.环境准备 1.maven设置: 2.IDEA设置 4.Spring Boot ...

  9. WPF/MVVM Quick Start Tutorial - WPF/MVVM 快速入门教程 -原文,翻译及一点自己的补充

    转载自 https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial WPF/MVVM Quick Start T ...

  10. 【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)

    编译并运行快速入门 需要在VisualStudio 2010上运行此快速入门示例 代码下载:ModularityWithMef.zip 先重新生成解决方案 再按F5运行此示例 说明: 在此快速入门示例 ...

随机推荐

  1. HarmonyOS Connect FAQ第三期

    原文:https://mp.weixin.qq.com/s/YpI9-k4yQvNhaMfg7Li82g,点击链接查看更多技术内容.   在开发HarmonyOS Connect生态产品时,你是否对设 ...

  2. flutter3-macOS桌面端os系统|flutter3.x+window_manager仿mac桌面管理

    原创力作flutter3+getX+window_manager仿Mac桌面系统平台Flutter-MacOS. flutter3_macui基于最新跨端技术flutter3.19+dart3.3+w ...

  3. Android开发 Error:The number of method references in a .dex file cannot exceed 64K.Android开发 Error:The number of method references in a .dex file cannot exceed 64K

    前言 错误起因: 在Android系统中,一个App的所有代码都在一个Dex文件里面. Dex是一个类似Jar的存储了多有Java编译字节码的归档文件. 因为Android系统使用Dalvik虚拟机, ...

  4. python抽帧及生成高质量的GIF图

    python抽帧及生成高质量的GIF图 对视频进行抽帧只需要两个模块即可: opencv-python (cv2) opencv-contrib-python 我们都知道视频有分辨率,即视频的宽度与高 ...

  5. 力扣453(java)-最小操作次数使数组元素相等(简单)

    题目: 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素相等的最小操作次数. 示例 1: 输入:nums = [1,2,3]输出:3解释:只需要3次操作 ...

  6. 支付宝移动端 Hybrid 解决方案探索与实践

    支付宝 Hybrid 方案建设与演进 目前支付宝有 2 套 Hybrid 方案: HTML5 容器与小程序.小程序是最近几年才出来,H5 容器已经有了很长时间的历史,所以我们就先从 H5 容器说起. ...

  7. 免费体验!阿里云智能LOGO帮你解决设计难题

    ​简介:超实用!零基础搞定一个高大上的智能logo设计 新年过后,往往是大家一年中士气最足的时候,散去了年末的疲惫和emo,重燃对新一年的热情和希望. 想创业的朋友们同样意气风发,趁着新年的劲头想大干 ...

  8. 【ESSD技术解读-01】 云原生时代,阿里云块存储 ESSD 快照服务如何被企业级数据保护所集成?

    ​简介: 本文描述了阿里云块存储快照服务基于高性能 ESSD 云盘提升快照服务性能,提供轻量.实时的用户体验及揭秘背后的技术原理.依据行业发展及云上数据保护场景,为企业用户及备份厂商提供基于快照高级特 ...

  9. [Go] httprouter 自动 OPTIONS 响应 和 CORS

    httprouter 是 Gin framework 使用的路由组件. 要对 OPTIONS 请求自动响应,比如支持 CORS 请求或者设置请求头,可用 Router.GlobalOPTIONS. r ...

  10. 2019-10-31-WPF-设置纯软件渲染

    title author date CreateTime categories WPF 设置纯软件渲染 lindexi 2019-10-31 8:59:2 +0800 2018-04-20 16:36 ...