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

posted @ 2014-07-01 16:01  天际翔龙  阅读(1696)  评论(0编辑  收藏  举报