更新ObservableCollection元素不起作用

时间:2016-08-23 12:51:38

标签: c# observablecollection

我的ViewModel中有一个带有INotifyPropertyChanged的ObservableCollection,比如A.现在我将循环浏览A来更新一些元素。

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部分。所以集合没有更新。

2 个答案:

答案 0 :(得分:4)

看起来您正在尝试更新ObservableCollection<ClassA>中的元素,而不是将集合设置为新值。如果您希望在调用MyViewModel.A.Type = "CASH"时进行房产更改,则ClassA需要实施INotifyPropertyChanged

(编辑:对于其他人看到这一点,请检查此question/answer - 我无法将此标记为可能重复。您需要监视集合中元素的属性更改,然后触发属性更改在您的ObservableCollection手动。容器不会为您执行此操作。)

答案 1 :(得分:0)

我使用自己的方法。通过使用通用列表从Observable Collection中检索所有项目。然后将通用列表转换为Observable Collection。

这不是最好的方法,但到目前为止它已经解决了。