2010-07-12 59 views
1

我有一個綁定到Employees的observableCollection的數據網格 用戶可以通過雙擊datagridRow進行在線編輯。 當綁定有問題的屬性時,我也使用UpdateSourceTrigger。僅跟蹤已更改的observableCollection中的項目。是否有可能?

當我用戶按下保存按鈕時,saveCommand在我的MVVM中被觸發,我想創建一個只有我修改了屬性的僱員的列表。

我所有的ViewModel實現INotifyPropertyChanged。

儘管谷歌鏈接很多,我似乎無法找到一個例子,帶你通過或解釋如何跟蹤已在observablecollection中更改的項目。

你能幫忙嗎?

回答

2

創建基類爲您的員工,例如,EntityBase和枚舉描述其狀態:

public enum EntityState 
    { 
     NotChanged, 
     Changed, 
     Added, 
     Deleted 
    } 

    public abstract class EntityBase : INotifyPropertyChanging, INotifyPropertyChanged 
    { 
     public event PropertyChangingEventHandler PropertyChanging; 
     public event PropertyChangedEventHandler PropertyChanged; 

     private EntityState state = EntityState.NotChanged; 

     public EntityState State 
     { 
      get { return state; } 
      set { state = value; } 
     } 

     public EntityBase() 
     { 
      state = EntityState.NotChanged; 
     } 

     protected virtual void SendPropertyChanging(string propertyName) 
     { 
      if ((this.PropertyChanging != null)) 
      { 
       this.PropertyChanging(this, new PropertyChangingEventArgs(propertyName)); 
      } 
     } 
     protected virtual void SendPropertyChanged(string propertyName) 
     { 
      if ((this.PropertyChanged != null)) 
      { 
       this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 

    } 

當收集您的聘用過的員工的一個變化 - 與EntityState.Changed紀念它,那麼你只能申請從收集中更改實體並根據需要處理它們。

+0

感謝您的幫助/答覆。 你是說鉤住了observableCollection的CollectionChanged事件,然後在那裏標記你的物品髒了 是你的意思嗎? – user9969 2010-07-12 15:52:27

+0

地點是你自己設定這個屬性。可能在setter中,可能會自定義PropertyChangedCallback的方法。這個想法是:當對象的某些屬性發生變化時 - 將該對象標記爲已更改。事情非常簡單,例如,您不需要將所有集合發佈到數據庫中,以便更新它時,只有1%的實體發生更改。 – 2010-07-12 15:59:07

+0

這正是我想要達到的目標。讓我走了,回到你身邊。 – user9969 2010-07-12 16:00:56

0

我不知道任何內置的方式來做你想做的。

我過去所做的是在集合中的對象上實現布爾型​​IsDirty屬性。然後在您提出PropertyChanged時,將IsDirty屬性設置爲true。

相關問題