简介:

问题:在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动态更新的更多相关文章

  1. WPF中动态更新TextBlock文字中的超链接,文本

    1.------------------------------------------------------------------------- 修改超链接的文本文字: <TextBloc ...

  2. WPF Datagrid 动态生成列 并绑定数据

    原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用  可 ...

  3. WPF datagrid 动态增加列

    DataGrid动态增加列 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.m ...

  4. Wpf DataGrid动态添加列,行数据(二)

    这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...

  5. Wpf DataGrid动态添加列,行数据(一)

    由于最近有这方面的需求,而且刚接触wpf不久,在网上找了很多方法,都不是使用MVVM模式的,因为DataGrid的列不能绑定 这就难受了,我想了个折中的方法,这个是使用了MVVMLight的消息机制, ...

  6. WPF DataGrid 增加"更新"模板列,根据行Row的选择而显示"更新"按钮

    SelectionMode="Single" <DataGridTemplateColumn Header=""> <DataGridTemp ...

  7. WPF DataGrid动态生成列的单元格背景色绑定

    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Column.DisplayInde ...

  8. WPF柱状图(支持数据库动态更新)

    之前我们讲到wpf组件基类以及组件开发,现在我们围绕之前的内容去开发一个组件. 效果图请加群查看,在群共享里面. 做出这个呢  是比较繁琐的. 首先要使用我们的基类 继承基类的模板自动生成如下几个文件 ...

  9. WPF柱状图(支持数据库动态更新)之组件的数据动态化

    WPF柱状图(支持数据库动态更新) 在这片文章中我们介绍了如何将柱状图包装成一个组件,将这个组件的属性对外开放和组件的外部属性根内部属性绑定以及非轮询动态更新数据的方式. 非轮询更新数据感觉介绍的不够 ...

  10. 编写 WPF DataGrid 列模板,实现更好的用户体验

    Julie Lerman 下载代码示例 最近我在为一个客户做一些 Windows Presentation Foundation (WPF) 方面的工作. 虽然我提倡使用第三方工具,但有时也会避免使用 ...

随机推荐

  1. KingbaseES数据库导入数据invalid byte sequence for encoding

    一.适用版本: KingbaseES数据库所有版本. 二.问题现象: 使用备份的数据进行还原,还原过程中发生异常. 日志信息: sys_restore: connecting to database ...

  2. #凸包,闵可夫斯基和#CF87E Mogohu-Rea Idol

    题目 按逆时针顺序给出三个凸包点集 \(\mathbb{A,B,C}\),每次查询给出点 \(D\), 问是否存在点 \(A\in\mathbb{A},B\in\mathbb{B},C\in\math ...

  3. #单位根反演,二项式定理#LOJ 6485 LJJ 学二项式定理

    题目 \[\large\sum_{i=0}^nC(n,i)S^ia_{i\bmod 4} \] \(n\leq 10^{18},S,a\leq 10^8\) 分析 前面这一坨看起来就像是二项式定理,考 ...

  4. Android NDK之使用 arm-v7a 汇编实现两数之和

    Android NDK之使用 arm-v7a 汇编实现两数之和 关键词: NDK armv7a WebRTC arm汇编 CMake 最近适配对讲程序,在webrtc的库编译的过程中,发现其为arm的 ...

  5. 本周四晚19:00知识赋能第3期直播丨OpenHarmony智能家居项目之控制面板功能实现

    OpenAtom OpenHarmony(以下简称"OpenHarmony")开源开发者成长计划项目自 2021 年 10 月 24 日上线以来,在开发者中引发高度关注. 成长计划 ...

  6. 深入剖析 Java 类属性与类方法的应用

    Java 类属性 Java 类属性,也称为字段,是类中的变量.它们用于存储与类相关的数据. 创建类属性 在类定义中声明属性: public class Main { int x; // 属性 Stri ...

  7. spring复习(二)AOP

    1.aop基于xml以及注解的AOP配置 什么是AOP 简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强. AOP术语: ...

  8. 什么是MurmurHash

    MurmurHash简介 MurmurHash是一种非加密散列函数,名称来自两个基本操作,乘法(MU)和旋转(R).与加密散列函数不同,它不是专门设计为难以被对手逆转,因此不适用于加密目的.在2018 ...

  9. Gin

    0x01 准备 (1)概述 定义:一个 golang 的微框架 特点:封装优雅,API 友好,源码注释明确,快速灵活,容错方便 优势: 对于 golang 而言,web 框架的依赖要远比 Python ...

  10. .NET 9 预览版 3 发布

    我们很高兴地宣布发布 .NET 9 预览版 3,其中包含 .NET 库.运行时和 SDK 的新功能和改进.此预览版带来了旨在提高性能.提高开发人员工作效率以及向 .NET 生态系统引入新功能的增强功能 ...