为什么不在WPF中使用BindingList

WPF*_*-it 14 wpf bindinglist observablecollection

我也在MSDN论坛上问过这个问题... http://social.msdn.microsoft.com/Forums/en/wpf/thread/4493988a-9bd8-48fe-aff0-348502136a80

我需要知道为什么微软建议WPF中BindingList没有正确支持...

BindingList在WPF 中没有用的是什么?我发现它非常实用.到目前为止,我个人没有发现BindingList任何较慢或内存负载较多.

另外WPF ItemsControls,ItemsTemplates,Styles,Hierarchies工作的伟大与BindingList太迟了.他们同样可以观察到.

作为一个自己的核心WPF开发者和ObservableCollection粉丝,我的信念被一个曾经完成的事情所震撼BindingList....

我为什么要使用ObservableCollectionBindingList?(保留INotifyPropertyChanged,它们都必须实现项目属性更改)

Ste*_*olt 16

这可能是有趣的:

http://www.themissingdocs.net/wordpress/?p=465

最重要的段落:

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

另一个注意事项 - AddNew,BindingList的另一个功能,Collection不具备这个功能 - 也不能扩展.它必须使用IndexOf来找出列表中新添加的项目最终的位置,以防它需要取消添加,因为它支持派生类型中的自动排序.(BindingList不支持自动排序...)

  • 链接条目的标题是"BindingList不缩放".有趣,但仔细阅读 - 只有在评论部分你才发现作者的应用程序是不寻常的,因为他想在他的用户界面上实时显示大量的更新.不太可能成为更常见的UI场景中的问题. (13认同)
  • 所以可以肯定地说 Binding List 在 99% 的 wpf 应用程序中都能正常工作 (2认同)