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实现几种常见图片点击效果
一. 样例介绍 HarmonyOS提供了常用的图片.图片帧动画播放器组件,开发者可以根据实际场景和开发需求,实现不同的界面交互效果,包括:点击阴影效果.点击切换状态.点击动画效果.点击切换动效. 相关 ...
- Hive 查看表/分区更新时间
1.查看分区 hive> show partitions table_name; 2.查看分区更新时间 获取hdfs路径 hive> desc formatted table_name; ...
- Web前端 -- ES6
ES标准中不包含 DOM 和 BOM的定义,只涵盖基本数据类型.关键字.语句.运算符.内建对象.内建函数等通用语法. 本部分只学习前端开发中ES6的最少必要知识,方便后面项目开发中对代码的理解. 1. ...
- textfsm 案例分享
由于安全需要,需要定期对接入层交换机配置进行合规检查,避免不规范配置存在的漏洞给公司网络带来安全风险. 如下案例是通过textfsm 提取交换机接口的配置信息,进一步进行检查准入配置是否开启: 1.首 ...
- 快速获取使用dblink的视图的全部字段
快速获取使用dblink的视图的全部字段 默认情况下,使用dblink连接的视图在PL/SQL是没法通过代码助手获取全部的字段的 如果要获取全部字段的话,可以使用一个奇怪的方法 对要获取的使用dbli ...
- 力扣977(Java)-有序数组的平方(简单)
题目: 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序. 示例 1: 输入:nums = [-4,-1,0,3,10]输出:[0,1, ...
- 关于多个 Cookie 的分隔符这件事
对于 Cookie 的处理上,我最近遇到一个问题,那就是如何分割 Cookie 的内容.有人说是使用逗号分割,有人说是使用分号分割,究竟用哪个才是对的?其实这个答案是需要分为两个过程,分别是请求和响应 ...
- 开发日记:中控PUSH协议
using System; using System.IO; using System.Net; using System.Text.RegularExpressions; namespace Con ...
- C++ 多级继承与多重继承:代码组织与灵活性的平衡
C++ 多级继承 多级继承是一种面向对象编程(OOP)特性,允许一个类从多个基类继承属性和方法.它使代码更易于组织和维护,并促进代码重用. 多级继承的语法 在 C++ 中,使用 : 符号来指定继承关系 ...
- 实验8 #第8章 Verilog有限状态机设计-2 #Verilog #Quartus #modelsim
2. 汽车尾灯控制器 2.1 实验要求:设计一个汽车尾灯控制电路. (1)功能:汽车左右两侧各有3个尾灯,要求控制尾灯按如下规则亮灭. 汽车沿直线行驶时,两侧指示灯全灭. 右转弯时,左侧的指示灯全灭, ...