我尝试使用以下ObservableDictionary的实现:ObservableDictionary (C#)的数据。
当我在将字典绑定到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>
怎么会超出范围,我应该怎么做才能使它正常工作?
7条答案
按热度按时间mv1qrgav1#
我最后是这么做的
字符串
这个实现对于用户来说看起来和感觉上都像字典,而对于WPF来说就像ObservableCollection
yh2wf1be2#
类似的数据结构,绑定到Dictionary类型集合
http://drwpf.com/blog/2007/09/16/can-i-bind-my-itemscontrol-to-a-dictionary/
它提供了一个新的数据结构ObservableDictionary,并在底层Dictionary发生任何更改时触发PropertyChanged。
ibrsph3r3#
我最终编写了一个类来保存键值对,并使用了该类的集合。我使用的是Caliburn Micro,这是BindableCollection的来源,但ObservableCollection应该以同样的方式工作。我使用MVVM模式。
视图模型
字符串
自定义keyValuePair
型
在视图中
型
我不能只绑定到一个字典,这让我很烦恼,但我发现这比从头开始编写ObservableDictionary并担心更改通知要容易得多。
ut6juiuv4#
ObservableDictionary在.Net Framework 4.5版本中添加:-
https://zamjad.wordpress.com/2012/10/12/observabledictionary-in-net-4-5/
下面是最新源代码的链接:
https://referencesource.microsoft.com/#PresentationFramework/src/Framework/MS/Internal/Annotations/ObservableDictionary.cs
flmtquvp5#
我首先创建了一个名为“ConcurrentObservableCollection”的类,在其中扩展了ObservableCollection函数。
字符串
然后我用新的“ConcurrentObservableCollection”替换了现有的“ObservabeCollection”
4bbkushb6#
安装Microsoft ParallelExtensionsExtras
现在通过Nuget提供:nuget.org/packages/MSFT.ParallelExtensionsExtras那个库实现了ObservableConcurrentDictionary,我试过了,它工作正常=]
请注意,其中一些功能现在是较新的.NET框架的一部分。ParallelExtensions“Extras”还有价值吗?
Microsoft Tour博客:https://blogs.msdn.microsoft.com/pfxteam/2010/04/04/a-tour-of-parallelextensionsextras/
仅供参考,从.NET ObservableDictionaryGeneral Observable Dictionary Class for DataBinding/WPF C#
bkhjykvo7#
即使我使用github的ObservableDictionary,我也遇到了这个异常。我已经在类级别声明了字典变量,后来我试图在访问它的方法中创建一个新示例。
给出异常的OldCode:
字符串
NewCode工作:
型