1

我正在使用我已定義的Job類的可觀察集合。我已經綁定了一個方法來處理INotifyCollectionChanged事件。 MSDN告訴我INotifyCollectionChanged是一個「動態變化的監聽器,比如當項目被添加或刪除或整個列表刷新時」,但我想傾聽集合中任何作業類的屬性更改,有沒有這個事件處理程序?我知道有一個INotifyPropertyChanged接口,但我希望這個工作在一個集合。ObservableCollections和C#中屬性的更改

編輯:

我對這個困惑說實話,所以我應該給我在做什麼,所以我可以得到我的回答給更多的背景資料。我有一個「作業」類此屬性:

public Boolean IsPlanned 
    { 
     get 
     { 
      return this.Storage<Job>().isPlanned; 
     } 
     set 
     { 
      var storage = this.Storage<Job>(); 

      if (storage.isPlanned != value) 
      { 
       storage.isPlanned = value; 
       this.OnPropertyChanged(() => this.isPlanned); 
       MessageBox.Show("IsPlanned property was changed on one of the jobs " + this.Subject); 
      } 
     } 
    } 

此作業類實際上從Telerik的控制的任命類(這只是恰巧執行INotifyPropertyChanged)繼承。從telerik文檔我也得到了上面的代碼(減去消息框)。現在,當我改變這個布爾值ONCE時,該消息框行被執行5次。

任何幫助讚賞!

編輯2:被IsPlanned路徑被改變:

PresentationManager.Instance.AllJobs.Single(o => o.JobGuid.Equals(((Job)state.DraggedAppointments.First()).JobGuid)).IsPlanned = true; 

PresentationManager.Instance.AllJobs.Single(o => o.JobGuid.Equals(((Job)payload.DraggedAppointments.First()).JobGuid)).IsPlanned = false; 

這些都是從被用來定義覆蓋的爲我定製的拖放行爲(從Control)不同類別。

+0

你是什麼意思「我想要這個工作在一個集合」?添加,刪除收藏項目? – ADIMO

+0

您可以包含更改IsPlanned屬性的代碼路徑嗎? –

+0

注意:我剛剛添加的第一行是那個導致消息框顯示5次的行,第二行工作正常(只顯示一次msg)。 –

回答

2

Job類上實現INotifyPropertyChanged接口。這應該允許您在ObservableCollection<Job>上使用PropertyChanged

爲了全面支持從綁定源傳輸數據值的對象 有約束力的目標,支持 綁定的屬性必須實現適當的屬性您的收藏中的每個對象改變 通知機制,如INotifyPropertyChanged接口。

+0

當然,再次感謝J.Kommer,對今天的隊友有很大的幫助。 –

+0

啊等,你的編輯只是困惑我哈哈我必須閱讀如何做到這一點。我在集合上實現這一點並不是很重要,所以纔想到它。我需要監視對作業類中任何屬性所做的任何更改(無論如何,所有作業都可以在此集合中找到),並且事件處理程序將調用完全不同的單例類中的方法。我會研究如何實現它,無論如何,我認爲這可能是鏈接: http://msdn.microsoft.com/en-us/library/ms229614.aspx –

+0

上面的鏈接看起來很簡單 - 我不太清楚爲什麼你需要繼承INotifyPropertyChanged類,但我很確定這是我的答案。 –