WPF开发快速入门【5】DataGrid的使用
概述
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的使用的更多相关文章
- WPF开发快速入门【7】WPF的拖放功能(Drag and Drop)
概述 本文描述WPF的拖放功能(Drag and Drop). 拖放功能涉及到两个功能,一个就是拖,一个是放.拖放可以发生在两个控件之间,也可以在一个控件自己内部拖放.假设界面上有两个控件,一个Tre ...
- Transform组件C#游戏开发快速入门
Transform组件C#游戏开发快速入门大学霸 组件(Component)可以看作是一类属性的总称.而属性是指游戏对象上一切可设置.调节的选项,如图2-8所示.本文选自C#游戏开发快速入门大学霸 ...
- HealthKit开发快速入门教程之HealthKit数据的操作
HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知道 ...
- HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID
HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID HealthKit开发准备工作 在开发一款HealthKit应用程序时,首先需要讲解HealthKit中有哪些类,在i ...
- HealthKit开发快速入门教程之HealthKit开发概述简介
HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为“He ...
- Apple Watch开发快速入门教程
Apple Watch开发快速入门教程 试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...
- 游戏控制杆OUYA游戏开发快速入门教程
游戏控制杆OUYA游戏开发快速入门教程 1.2.2 游戏控制杆 游戏控制杆各个角度的视图,如图1-4所示,它的硬件规格是本文选自OUYA游戏开发快速入门教程大学霸: 图1-4 游戏控制杆各个角度的 ...
- SpringBoot开发快速入门
SpringBoot开发快速入门 目录 一.Spring Boot 入门 1.Spring Boot 简介 2.微服务 3.环境准备 1.maven设置: 2.IDEA设置 4.Spring Boot ...
- WPF/MVVM Quick Start Tutorial - WPF/MVVM 快速入门教程 -原文,翻译及一点自己的补充
转载自 https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial WPF/MVVM Quick Start T ...
- 【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)
编译并运行快速入门 需要在VisualStudio 2010上运行此快速入门示例 代码下载:ModularityWithMef.zip 先重新生成解决方案 再按F5运行此示例 说明: 在此快速入门示例 ...
随机推荐
- HarmonyOS Connect FAQ第三期
原文:https://mp.weixin.qq.com/s/YpI9-k4yQvNhaMfg7Li82g,点击链接查看更多技术内容. 在开发HarmonyOS Connect生态产品时,你是否对设 ...
- flutter3-macOS桌面端os系统|flutter3.x+window_manager仿mac桌面管理
原创力作flutter3+getX+window_manager仿Mac桌面系统平台Flutter-MacOS. flutter3_macui基于最新跨端技术flutter3.19+dart3.3+w ...
- 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虚拟机, ...
- python抽帧及生成高质量的GIF图
python抽帧及生成高质量的GIF图 对视频进行抽帧只需要两个模块即可: opencv-python (cv2) opencv-contrib-python 我们都知道视频有分辨率,即视频的宽度与高 ...
- 力扣453(java)-最小操作次数使数组元素相等(简单)
题目: 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素相等的最小操作次数. 示例 1: 输入:nums = [1,2,3]输出:3解释:只需要3次操作 ...
- 支付宝移动端 Hybrid 解决方案探索与实践
支付宝 Hybrid 方案建设与演进 目前支付宝有 2 套 Hybrid 方案: HTML5 容器与小程序.小程序是最近几年才出来,H5 容器已经有了很长时间的历史,所以我们就先从 H5 容器说起. ...
- 免费体验!阿里云智能LOGO帮你解决设计难题
简介:超实用!零基础搞定一个高大上的智能logo设计 新年过后,往往是大家一年中士气最足的时候,散去了年末的疲惫和emo,重燃对新一年的热情和希望. 想创业的朋友们同样意气风发,趁着新年的劲头想大干 ...
- 【ESSD技术解读-01】 云原生时代,阿里云块存储 ESSD 快照服务如何被企业级数据保护所集成?
简介: 本文描述了阿里云块存储快照服务基于高性能 ESSD 云盘提升快照服务性能,提供轻量.实时的用户体验及揭秘背后的技术原理.依据行业发展及云上数据保护场景,为企业用户及备份厂商提供基于快照高级特 ...
- [Go] httprouter 自动 OPTIONS 响应 和 CORS
httprouter 是 Gin framework 使用的路由组件. 要对 OPTIONS 请求自动响应,比如支持 CORS 请求或者设置请求头,可用 Router.GlobalOPTIONS. r ...
- 2019-10-31-WPF-设置纯软件渲染
title author date CreateTime categories WPF 设置纯软件渲染 lindexi 2019-10-31 8:59:2 +0800 2018-04-20 16:36 ...