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-2026 CODEPRJ.COM