2016-08-23 63 views
0

我有一個ObservableCollection在我的ViewModel與INotifyPropertyChanged,說A.現在我要循環通過A獲取一些元素更新。更新ObservableCollection元素不工作

public ObservableCollection<ClassA> A 
{ 
    get 
    { 
     if (this.a== null) 
     { 
      this.a= new ObservableCollection<ClassA>(); 
     } 
     return this.a; 
    } 
    set 
    { 
     this.a= value; 
     this.OnPropertyChanged("A");// implement PropertyChangedEvent 
    } 
} 

在循環中,我更新了值。

foreach (var item in MyViewModel.A) 
{ 
    if(condition) 
     MyViewModel.A.Type= "CASH"; 
    else 
     MyViewModel.A.Type= "CHECK"; 
} 

但我看到setter部分沒有達到。所以收集不會更新。

回答

0

我用我自己的方法。通過使用通用列表來檢索Observable Collection中的所有項目。然後將通用列表轉換爲Observable Collection。

這不是最好的方法,但到目前爲止它的工作。

4

看起來您正在嘗試更新ObservableCollection<ClassA>中的元素,而不是將集合設置爲新值。如果您想在致電MyViewModel.A.Type = "CASH"時發生財產變更,則ClassA需要執行INotifyPropertyChanged

(編輯:對於其他人見狀,檢查此question/answer - 我不能以紀念這是一個可能重複你需要監視集合中的元素的屬性更改,然後觸發您ObservableCollection的屬性更改。容器不會爲你做這件事。)

+0

不,我做到了。 ClassA已經實現了INotifyPropertyChanged。 – Bigeyes

+0

好的。建議看看這個[問題](http://stackoverflow.com/questions/1427471/observablecollection-not-noticing-when-item-in-it-changes-even-with-inotifyprop)。他們似乎在做與你類似的事情。 –

+0

我試過了。它不能很好地工作,因爲它包含ADD/REMOVE。我想替換部分代碼。 – Bigeyes