更改ObservableCollection值会引发只读错误

时间:2012-10-06 20:11:44

标签: c#

我将ObservableCollection定义为

public ObservableCollection<KeyValuePair<string, double>> comboBoxSelections 
{ 
 get; 
 set; 
}

稍后在我的代码中我需要迭代集合并仅更改一些值但保持相同的键。我试过以下

        for (int i = 0; i < comboBoxSelections.Count ; i++)
        {
            comboBoxSelections[i].Value = SomeDoubleValue;
        }

但这会导致错误Property or indexer 'System.Collections.Generic.KeyValuePair<string,double>.Value' cannot be assigned to -- it is read only

有人可以解释我收到错误的原因以及如何允许更新ObservableCollection吗?

2 个答案:

答案 0 :(得分:2)

ObservableCollection<T>不是只读的,而是KeyValuePair<TKey, TValue>,因为后者是structstruct s是一个不可改变的好设计实践。

更新集合的正确方法是

comboBoxSelections[i] =
    new KeyValuePair<string, double>(comboBoxSelections[i].Key, someDoubleValue);

答案 1 :(得分:1)

嗯,错误信息很明确。 Value的{​​{1}}属性是只读的。我无法对问题的第二部分给出详细的答案,但快速的谷歌搜索给出了:

http://blogs.microsoft.co.il/blogs/shimmy/archive/2010/12/26/observabledictionary-lt-tkey-tvalue-gt-c.aspx