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

你可能感兴趣的:(DevExpress)