为什么不在WPF中使用BindingList

为什么不在WPF中使用BindingList,wpf,observablecollection,bindinglist,Wpf,Observablecollection,Bindinglist,我也在MSDN论坛上问过这个问题。。。 我需要知道为什么微软建议WPF中不正确地支持BindingList 在WPF中,哪些不适用于BindingList?我觉得它很有用。到目前为止,我个人还没有发现BindingList的速度更慢或内存负载更大 另外,WPFItemsControls,ItemsTemplates,样式,层次结构也可以很好地与绑定列表配合使用。它们同样可以观察到 作为一名铁杆WPF开发人员和一名observeCollection粉丝,我的信念正在被BindingList所做的

我也在MSDN论坛上问过这个问题。。。

我需要知道为什么微软建议WPF中不正确地支持
BindingList

在WPF中,哪些不适用于
BindingList
?我觉得它很有用。到目前为止,我个人还没有发现
BindingList
的速度更慢或内存负载更大

另外,WPF
ItemsControls
ItemsTemplates
样式
层次结构
也可以很好地与
绑定列表
配合使用。它们同样可以观察到

作为一名铁杆WPF开发人员和一名
observeCollection
粉丝,我的信念正在被
BindingList
所做的一切动摇

为什么要在BindingList上使用
ObservableCollection

(将INotifyPropertyChanged放在一边,两者都必须为项目属性更改实施)

这可能会引起兴趣:

最重要的段落:

但是这个实现没有扩展性,速度很慢,在较大的列表中执行得非常糟糕。如果您的元素类型支持INotifyPropertyChanged,则每次这些元素中的一个引发property changed事件时,都会遍历整个列表,以在引发事件的项目列表中计算出索引!当我第一次意识到这一点时,我感到震惊。您可以看到BindingList实际上只是集合上的一个相当薄的包装器,因此没有与每个条目关联的元数据,元素PropertyChanged事件的所有绑定都指向一个处理程序,它得到的只是已更改属性的源和名称,因此,如果不进行搜索,就无法在ListChangedEventArgs中包含NewIndex参数。(默认情况下,此搜索甚至使用默认的对象比较器,因此,如果列表中碰巧有两个不同但有时相等的对象,请享受结果…)

另一个旁注是AddNew,BindingList的另一个特性是Collection没有的,它也不可扩展。它必须使用IndexOf找出新添加的项在列表中的位置,以防需要取消添加,因为它支持在派生类型中自动排序。(BindingList本身不支持自动排序…)


可能是@Leom的重复,该线程也没有回答问题,因为
BindingList
有什么问题?ObservableCollection已经在添加或删除项时发出通知。您不必实现INotifyPropertyChanged。“我需要知道它是由Microsoft自己声明的”。那么我认为你需要问微软,而不是Stackoverflow。@Daniel你搞错了。他指的是每个需要实现INotifyPropertyChanged的项目,以便观察项目本身的变化。太棒了!一吨泰铢!这就是我想知道的。。。级联项更改通知!我的信仰恢复了。:-)链接条目的标题为“BindingList不可缩放”。有趣,但请仔细阅读-只有在评论部分,您才会发现作者的应用程序与众不同,因为他希望在UI上实时显示大量更新。在更常见的UI场景中不太可能出现问题。所以可以肯定地说,绑定列表在99%的wpf应用程序中工作良好