首页 > 代码库 > DevExpress的GridControl控件更新數據問題解決辦法

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框架, 記錄用。