翼度科技»论坛 编程开发 .net 查看内容

WPF-dataGrid动态更新

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
简介:

问题:在WPF中,使用了ObservableCollection作为dataGrid的数据源,发现更新数据的时候不会触发dataGrid的更新
By MaQaQ 2023-11-22
分析:

1、ObservableCollection 会在集合的元素添加、移除或者清空时才触发更新通知,对集合中元素的属性更改是不会触发通知的。
2、如果想在更新数据时触发通知,可以将 T类实现 INotifyPropertyChanged 接口,这样当其属性发生更改时,会触发通知并更新 dataGrid。
实现如下:
  1、xml中
  
  2、cs中

  • 定义ObservableCollection memberData = new ObservableCollection();
  • Model定义如下:
  1. public class Model : INotifyPropertyChanged
  2. {
  3.     protected int id;
  4.     protected string name;
  5.     protected bool online;
  6.     protected bool registered;
  7.     public int ID { get => id; set => id = value; }
  8.     public string Name { get => name; set => name = value; }
  9.     public bool IsOnline
  10.     {
  11.         get => online;
  12.         set
  13.         {
  14.             if (online != value)
  15.             {
  16.                 online = value;
  17.                 OnPropertyChanged("IsOnline");
  18.             }
  19.         }
  20.     }
  21.     public bool IsRegistered
  22.     {
  23.         get => registered;
  24.         set
  25.         {
  26.             if (registered != value)
  27.             {
  28.                 registered = value;
  29.                 OnPropertyChanged("IsRegistered");
  30.             }
  31.         }
  32.     }
  33.     public event PropertyChangedEventHandler PropertyChanged;
  34.     protected void OnPropertyChanged(string name)
  35.     {
  36.         PropertyChangedEventHandler handler = PropertyChanged;
  37.         if (handler != null)
  38.         {
  39.             handler(this, new PropertyChangedEventArgs(name));
  40.         }
  41.     }
  42. }
复制代码
View Code

  • 绑定dataGrid数据源:dataGrid.DataContext = memberData;
  • 更新memberData数据:
  1. private void ElevatorChanged(Data.ElevatorModel model)
  2. {
  3.     var result1 = memberData.Count == 0 ? null : memberData.Where(p => p.Name == model.Name).Count() == 0 ? null : memberData.Where(p => p.Name == model.Name).First();
  4.     if (result1 != null)
  5.     {
  6.         result1.ID = model.ID;
  7.         result1.Name = model.Name;
  8.         result1.IsOnline = model.IsOnline;
  9.         result1.IsRegistered = model.IsRegistered;
  10.     }
  11.     else
  12.     {
  13.         memberData.Add(model);
  14.     }
  15. }
复制代码
View Code上述例子中,当IsOnline、IsRegistered更新或者memberData.Add(model)时,会触发通知并更新dataGrid的显示。
总结:

1、使用ObservableCollection会在集合的元素添加、移除或者清空时才触发更新
2、使用INotifyPropertyChanged 接口会在属性发生更改时触发通知
来源:https://www.cnblogs.com/magicMaQaQ/archive/2023/11/22/17849078.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具