WPF-如何使用键(如字典)实现ObservableCollection?我已经将ObservableCollection与WPF一起用于绑定,效果很好。我现在真正想要的是像字典一样的东西,它有一个我可以使用的键,所以有效地像一个“ObservableCollection”。您能否建议可用于提供此类ObservableCollection的代码?我的目标是拥有一个可以从WPF绑定到的类似字典的结构。感谢有人已经做到了。我还没有尝试过,但没有什么可失去的。创建一个实现IDictionary、INotifyCollectionChanged和INotifyPropertyChanged接口的类。此类将有一个Dictionary实例,该实例将用于实现IDictionary(下面将其中一个Add方法作为示例编写)。INotifyCollectionChanged和INotifyProperyChanged都需要存在事件,这些事件应该在包装函数中的适当位置触发(再次参考下面的Add方法作为示例)//IDictionary实现的方法和属性将遵从mDictionary:publicvoidAdd(TKeykey,TValuevalue){mDictionary.Add(key,value);OnCollectionChanged(NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add,value)return;}//INotifyCollectionChanged的??实现:公共事件NotifyCollectionchangedEventChangedvoOnCollectionChanged(NotifyCollectionChangedEventArgsargs){//事件触发实现}//INotifyProperyChanged的??实现:公共事件ProperyChangedProperyChangedEventHandlerProtectedPropertyChangedEventArgsargs){//eventfireimplementation}}编辑:请注意,直接接口或间接口实现IDictionary接口需要实现三个附加接口:ICollection>IEn可枚举>IEnumerable。根据您的需要,您可能不必实现整个IDictionary接口,如果您只是要调用几个方法,那么仅实现这些方法会使IDictionary接口变得奢侈您必须实际发现INotifyCollectionChanged和INotifyPropertyChanged接口才能使绑定正常工作。公共事件PropertyChangedEventHandlerPropertyChanged;publicnewvoidAdd(TKeykey,TValuevalue){base.Add(key,value);如果(!TryGetValue(key,out_))返回;varindex=Keys.Count;OnPropertyChanged(名称(计数));OnPropertyChanged(名称(值));OnCollectionChanged(NotifyCollectionChangedAction.Add,value,index);}publicnewvoidRemove(TKeykey){if(!TryGetValue(key,outvarvalue))return;varindex=IndexOf(Keys,key);OnPropertyChanged(名称(计数));OnPropertyChanged(名称(值));OnCollectionChanged(NotifyCollectionChangedAction.Remove,value,index);base.Remove(键);}publicnewvoidClear(){}protectedvirtualvoidOnPropertyChanged(PropertyChangedEventArgse){PropertyChanged?.Invoke(这,e);}protectedvirtualvoidOnCollectionChanged(NotifyCollectionChangedEventArgse){CollectionChanged?.Invoke(this,e);}privatevoidOnPropertyChanged(stringpropertyName){OnPropertyChanged(newPropertyChangedEventArgs(propertyOnName));(NotifyCollectionChangedAction操作,对象项目){OnCollectionChanged(新NotifyCollectionChangedEventArgs(操作,项目));}privatevoidOnCollectionChanged(NotifyCollectionChangedActionaction,objectitem,intindex){OnCollectionChanged(newNotifyCollectionChangedEventArgs(action,item));IndexOf(KeyCollectionkeys,TKeykey){varindex=0;foreach(varkinkeys){if(Equals(k,key))返回索引;索引++;}返回-1;我可以添加、删除和清除你必须明白,如果你使用扩展方法或采用Dictonary参数的简单方法,你将看不到更改,因为在这种情况下,Add或Remove方法将采用Dictonary(不是ObservableDictonary)。所以你必须指明ObservableDictonary的方法(添加或删除)怎么样:ObservableCollection>()wherestringandobjectandsampletype当然上面是C#学习教程:WPF-HowtoimplementObservableCollectionwithkeys(likedictionaries)?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
