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运行此示例 说明: 在此快速入门示例 ...
随机推荐
- 二、Unity调用Xcode封装方法
1.开始封装Unity调用接口 我们在Xcode中 写的接口需要在extern "C"中(加上extern "C"后,会指示编译器这部分代码按C语言的进行编译) ...
- 全新适配鸿蒙生态,Cocos引擎助力3D应用开发
原文链接:https://mp.weixin.qq.com/s/rCACesJ4QxRuU2NRjIvbDQ,点击链接查看更多技术内容: 一.适配HarmonyOS背景 HarmonyOS 3.1版本 ...
- 【Python3.10.4】Centos7 ,centos8,centos9源码安装 python3.10.4 解释器
1.检查是否安装wget如果没有安装则: 终端执行: yum -y install wget 2.下载python3源码包 终端执行: wget https://www.python.org/ftp/ ...
- TypeScript 中类的理解?应用场景?
一.是什么 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础 ❝ 类是一种用户定义的引用数据类型,也称类类型 ❞ 传统的面向对象语 ...
- 《c#高级编程》第3章C#3.0中的更改(五)——扩展方法
C#扩展方法是一种语法,可以为已有的类添加新的实例方法,而无需修改原来的类定义.它的语法形式为: ```csharppublic static void MyExtensionMethod(this ...
- 【笔记】go语言--函数式编程
[笔记]go语言--函数式编程 简单来说,go语言的函数式编程体现的是一个闭包的情况 函数式编程 VS 函数指针 函数是一等公民:参数,变量,返回值都可以是函数 高阶函数 函数->闭包 &quo ...
- Llama3-8B到底能不能打?实测对比
前几天Meta开源发布了新的Llama大语言模型:Llama-3系列,本次一共发布了两个版本:Llama-3-8B和Llama-3-70B,根据Meta发布的测评报告,Llama-3-8B的性能吊打之 ...
- OpenSergo 流量路由:从场景到标准化的探索
简介: 本文我们将从流量路由这个场景入手,从常见的微服务治理场景出发.先是根据流量路由的实践设计流量路由的 Spec,同时在 Spring Cloud Alibaba 中实践遵循 OpenSergo ...
- EasyNLP带你实现中英文机器阅读理解
简介: 本⽂将提供对MacBERT模型的技术解读,以及如何在EasyNLP框架中使⽤MacBERT及其他预训练语言模型,进行中英文机器阅读理解任务的训练与预测. 作者:施晨.黄俊 导读 机器阅读理解是 ...
- 龙蜥开源Plugsched:首次实现 Linux kernel 调度器热升级 | 龙蜥技术
简介:对于plugsched而言,无论是 bugfix,还是性能优化,甚至是特性的增.删.改,都可胜任. 文/龙蜥社区内核开发人员 陈善佩.吴一昊.邓二伟 Plugsched 是 Linux 内 ...