DevExpress的GridControl控件更新數據問題解決辦法
開發WPF程序時,使用Devexpress的GridControl控件用ItemSource綁定數據,在頁面進行編輯時,當屬性繼承INotifyPropertyChanged接口時
會同步更新後臺數據。今天在開發時遇到一種情況,當通過GridControl中Row上Button【Command】改變行內數據,也就是binding的Detail數據已
改變,這時NotifyPropertyChanged有觸發,但改變的行數據不會同步更新到UI上,目前測試有兩種方式進行解決。
1.直接new 一個新的行數據對象
2.通過Messenger類發送通知至UI頁面, UI註冊通知,收到通知後執行 GridControl[GridControl 名稱].RefrshData()方法,進行刷新
部分測試代碼:
第一種:
public RelayCommand<GridRowVal> MyCommand { get { return _myCommand ?? (_myCommand = new RelayCommand<GridRowVal>( p => { var row = this.GridData.SingleOrDefault(q => q.Name == p.Name); if (row != null) { int index = this.GridData.IndexOf(p); this.GridData[index] = new GridRowVal { Name = p.Name + "test", IsCheck = p.IsCheck, Memo = p.Memo }; } })); } }
第二種:
public RelayCommand<GridRowVal> MyCommand { get { return _myCommand ?? (_myCommand = new RelayCommand<GridRowVal>( p => { var row = this.GridData.SingleOrDefault(q => q.Name == p.Name); if (row != null) { row.Name = p.Name+"abc"; Messenger.Default.Send<string>("Refresh"); } })); } } //頁面.cs 構造函數中 Messenger.Default.Register<string>(this, p => { if (p == "Refresh") { GridControl1.RefreshData(); } });
備註:項目中使用了MVVMLight框架, 記錄用。