2016-08-23 62 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