陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2169,comments - 570,views - 413万

 

总结

先放结论:
datagrid的刷新方式:

  1. 重新绑定 ,全部刷新,最常用的,都知道
	datagrid.itemsSource=null;
	datagrid.itemsSource=list;

但有些时候不方便重新绑定,于是

  1. 针对数据源有增删,需要实时显示
	将datagrid绑定的list<object>换成ObservableCollection<T>类型
  1. 只刷新特定列,需要继承INotifyPropertyChanged接口,具体如下例子

问题描述

问题源于公司项目中对一系列报警条目做 启用/屏蔽 开关,就是下面的小功能。
在这里插入图片描述
功能很顺利完成了,但是点击header上的总开关时,需要对整个datagrid刷新,才能让下面的开关状态正常显示出来。但是这个datagrid里面数据量比较大,而且部分列是动态生成的,对整个datagrid刷新会出现部分动态生成列没有正常加载。体验很不好。如果能只刷新这一列,其他的列不管,就好了。

解决方案

实现INotifyPropertyChanged的ViewModel。
在datagrid绑定的数据实体类里,继承INotifyPropertyChanged,实现该方法,并在要实时刷新的列的set中加上

	OnPropertyChanged("ColumnName");
  • 1

写个列子:

	public class student : INotifyPropertyChanged{
	
		public event PropertyChangedEventHandler PropertyChanged;
    	private void OnPropertyChanged(string propertyName)
    	{
        	if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    	}
    	
    	private bool _ischecked;
    	public bool ischecked{
			get { return _ischecked; }
			set { _ischecked=value; OnPropertyChanged("ischecked"); }
		}
		public string name { get; set; }
	}


如上设置之后,绑定ischecked的一列,只要数据源发生变化,data的这一列立马就会刷新,其他列,如上面的name列,即使数据变化了,不重新绑定数据,该列不会刷新。如下图的demo
在这里插入图片描述
Button点击事件中同时改变了ischecked和name数据。但界面上只有checkbox列刷新了。

 

posted on   宏宇  阅读(1842)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2020-09-01 aida64怎么用?aida64最详细的使用教程
2020-09-01 SQL Server2019最大并行度
2016-09-01 元数据
2011-09-01 HTTP详解(转载)
2010-09-01 更改Server 2008域用户密码策略
2010-09-01 Windows Server 2008 IIS7部署
2010-09-01 磁盘阵列(RAID)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示