WPF-dataGrid动态更新
简介:
问题:在WPF中,使用了ObservableCollection<T>作为dataGrid的数据源,发现更新数据的时候不会触发dataGrid的更新
By MaQaQ 2023-11-22
分析:
1、ObservableCollection 会在集合的元素添加、移除或者清空时才触发更新通知,对集合中元素的属性更改是不会触发通知的。
2、如果想在更新数据时触发通知,可以将 T类实现 INotifyPropertyChanged 接口,这样当其属性发生更改时,会触发通知并更新 dataGrid。
实现如下:
1、xml中
<DataGrid x:Name="dataGrid" ItemsSource="{Binding}" >
2、cs中
- 定义ObservableCollection<Model> memberData = new ObservableCollection<Model>();
- Model定义如下:

public class Model : INotifyPropertyChanged
{
protected int id;
protected string name;
protected bool online;
protected bool registered;
public int ID { get => id; set => id = value; }
public string Name { get => name; set => name = value; }
public bool IsOnline
{
get => online;
set
{
if (online != value)
{
online = value;
OnPropertyChanged("IsOnline");
}
}
}
public bool IsRegistered
{
get => registered;
set
{
if (registered != value)
{
registered = value;
OnPropertyChanged("IsRegistered");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
- 绑定dataGrid数据源:dataGrid.DataContext = memberData;
- 更新memberData数据:

private void ElevatorChanged(Data.ElevatorModel model)
{
var result1 = memberData.Count == 0 ? null : memberData.Where(p => p.Name == model.Name).Count() == 0 ? null : memberData.Where(p => p.Name == model.Name).First();
if (result1 != null)
{
result1.ID = model.ID;
result1.Name = model.Name;
result1.IsOnline = model.IsOnline;
result1.IsRegistered = model.IsRegistered;
}
else
{
memberData.Add(model);
}
}
上述例子中,当IsOnline、IsRegistered更新或者memberData.Add(model)时,会触发通知并更新dataGrid的显示。
总结:
1、使用ObservableCollection会在集合的元素添加、移除或者清空时才触发更新
2、使用INotifyPropertyChanged 接口会在属性发生更改时触发通知
WPF-dataGrid动态更新的更多相关文章
- WPF中动态更新TextBlock文字中的超链接,文本
1.------------------------------------------------------------------------- 修改超链接的文本文字: <TextBloc ...
- WPF Datagrid 动态生成列 并绑定数据
原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用 可 ...
- WPF datagrid 动态增加列
DataGrid动态增加列 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.m ...
- Wpf DataGrid动态添加列,行数据(二)
这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...
- Wpf DataGrid动态添加列,行数据(一)
由于最近有这方面的需求,而且刚接触wpf不久,在网上找了很多方法,都不是使用MVVM模式的,因为DataGrid的列不能绑定 这就难受了,我想了个折中的方法,这个是使用了MVVMLight的消息机制, ...
- WPF DataGrid 增加"更新"模板列,根据行Row的选择而显示"更新"按钮
SelectionMode="Single" <DataGridTemplateColumn Header=""> <DataGridTemp ...
- WPF DataGrid动态生成列的单元格背景色绑定
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Column.DisplayInde ...
- WPF柱状图(支持数据库动态更新)
之前我们讲到wpf组件基类以及组件开发,现在我们围绕之前的内容去开发一个组件. 效果图请加群查看,在群共享里面. 做出这个呢 是比较繁琐的. 首先要使用我们的基类 继承基类的模板自动生成如下几个文件 ...
- WPF柱状图(支持数据库动态更新)之组件的数据动态化
WPF柱状图(支持数据库动态更新) 在这片文章中我们介绍了如何将柱状图包装成一个组件,将这个组件的属性对外开放和组件的外部属性根内部属性绑定以及非轮询动态更新数据的方式. 非轮询更新数据感觉介绍的不够 ...
- 编写 WPF DataGrid 列模板,实现更好的用户体验
Julie Lerman 下载代码示例 最近我在为一个客户做一些 Windows Presentation Foundation (WPF) 方面的工作. 虽然我提倡使用第三方工具,但有时也会避免使用 ...
随机推荐
- MobileNext:打破常规,依图逆向改造inverted residual block | ECCV 2020
论文深入分析了inverted residual block的设计理念和缺点,提出更适合轻量级网络的sandglass block,基于该结构搭建的MobileNext.根据论文的实验结果,Mobil ...
- KingbaseES V8R6 索引膨胀
索引膨胀 对于索引,随着业务不断的增删改,会造成膨胀,尤其Btree索引,也会涉及索引分裂.合并等,导致索引访问效率降低.维护成本增加.另外,索引页的复用与HEAP PAGE不一样,因为索引的内容是有 ...
- 性能测试思想(What is performance testing?)
1.什么是性能测试 什么是软件性能? 定义:软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,而是在完成该功能是展示出来的及时性. 比如:一个登录功能他能实现登录操作,但是登录 ...
- #线段树分治,背包#CF601E A Museum Robbery
题目 有 \(n\) 个展品正在被展览,每一个展品都有一价值 \(v\) 个和一个混乱度 \(w\) ,现在有 \(m\) 次操作: 1 \(v\) \(w\) :加入一个新的展品,价值为\(v\), ...
- 如何知道 window 的 load 事件已经触发
背景 为了使页面加载更快,常常将一些不重要的第三方脚本在页面完成加载后进行懒加载. // 做一些不影响业务的事情 window.addEventListener('load', () => { ...
- 直播预告丨OpenHarmony标准系统多媒体子系统之音频解读
今晚19点,OpenHarmony开源开发者成长计划知识赋能第五期"掌握OpenHarmony多媒体的框架原理"的第四节直播课,即将开播! 深开鸿资深技术专家苑春鸽老师,将在Ope ...
- Dev 控件 gridControl教程
Dev 控件 gridControl教程:https://www.bilibili.com/video/BV1gz4y1R7Wk/?spm_id_from=333.788.recommend_more ...
- C#实现的下拉多选框,下拉多选树,多级节点
今天给大家上个硬货,下拉多选框,同时也是下拉多选树,支持父节点跟子节点!该控件是基于Telerik控件封装实现的,所以大家在使用的过程中需要引用Telerik.WinControls.dll.Tele ...
- 【开发者说】XstoryMaker快速书写剧本场景动画
原文:https://mp.weixin.qq.com/s/63V0dfD2IufbX92JeD-G_A,点击链接查看更多技术内容. [开发者说]栏目是为HarmonyOS开发者提供的展示和分享平台, ...
- Spring Cloud Bus:消息总线
Spring Cloud Bus:消息总线 SpringCloud学习教程 SpringCloud Spring Cloud Bus 使用轻量级的消息代理来连接微服务架构中的各个服务,可以将其用于广播 ...