WPF DataGrid双向绑定


 

总结

先放结论:
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列刷新了。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM