0

我有一个 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

4

2 回答 2

2

不是ObservableCollection<T>只读的,而是KeyValuePair<TKey, TValue>,因为后者是struct. structs 是不可变的,这是一个很好的设计实践。

更新收藏的正确方法是

comboBoxSelections[i] =
    new KeyValuePair<string, double>(comboBoxSelections[i].Key, someDoubleValue);
于 2012-10-06T20:21:54.543 回答
1

好吧,错误信息很清楚。的Value属性KeyValuePair是只读的。我无法为问题的第二部分提供详细答案,但快速谷歌搜索给出:

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

于 2012-10-06T20:14:40.190 回答