我正在尝试使用 ObservableDictionary 的以下实现: ObservableDictionary (C#) 。
当我在将字典绑定(bind)到 DataGrid 时使用以下代码时:
ObserveableDictionary<string,string> dd=new ObserveableDictionary<string,string>();
....
dd["aa"]="bb";
....
dd["aa"]="cc";
在
dd["aa"]="cc";
我收到以下异常Index was out of range. Must be non-negative and less than the size of the
collection. Parameter name: index
此异常在
CollectionChanged(this, new NotifyCollectionChangedEventArgs(action, newItem, oldItem)
中的以下方法中抛出:private void OnCollectionChanged(NotifyCollectionChangedAction action, KeyValuePair<TKey, TValue> newItem, KeyValuePair<TKey, TValue> oldItem)
{
OnPropertyChanged();
if (CollectionChanged != null) CollectionChanged(this, new NotifyCollectionChangedEventArgs(action, newItem, oldItem));
}
index
参数似乎对应于 KeyValuePair<TKey, TValue> oldItem
。KeyValuePair<TKey, TValue>
怎么会超出范围,我应该怎么做才能使它工作? 最佳答案
类似的数据结构,绑定(bind)到 Dictionary 类型集合
http://drwpf.com/blog/2007/09/16/can-i-bind-my-itemscontrol-to-a-dictionary/
它提供了一个新的数据结构 ObservableDictionary 并在底层 Dictionary 发生任何更改时触发 PropertyChanged。