是否有一个具有以下特征的集合(BCL或其他):
如果更改集合则发送事件如果集合中的任何元素发送事件,则发送PropertyChanged事件.排序的ObservableCollection<T>位置T: INotifyPropertyChanged和集合也监视元素的变化.
我可以自己包装一个可观察的集合,并在添加/删除集合中的元素时进行事件订阅/取消订阅,但我只是想知道现有的集合是否已经这样做了?
我正在使用ListBox来维护WPF应用程序中的项目列表.ListBox数据源是一个包含在ObservableCollection中的HashSet.即,我有以下代码:
this.shackSet = new ObservableCollection<Shack>(new HashSet<Shack>());
this.shackListing.ItemsSource = this.shackSet;
Run Code Online (Sandbox Code Playgroud)
...其中shackListing是一个ListBox控件,另一个是ICollection中的shackSet.但是,每当我在添加第一个项目后向shackSet添加任何内容时,我会在ListBox中看到多个项目.即,就像新添加的项目被添加到列表中一样,无论它们是否已添加到集合中.当我看到ICollection的签名#Add:
void Add(T obj);
Run Code Online (Sandbox Code Playgroud)
...和HashSet #Add:
bool Add(T obj);
Run Code Online (Sandbox Code Playgroud)
......这使我相信有一个影响包裹HashSets其中新添加的项目被添加到列表框,无论是因为的ObservableCollection没有告诉该对象是否实际添加到收藏垫层的方式中的错误,因为ICollection的#返回类型添加无效.其他人可以证实这一点吗?