2012-03-02 50 views
13

我问在MSDN论坛以及这个问题... http://social.msdn.microsoft.com/Forums/en/wpf/thread/4493988a-9bd8-48fe-aff0-348502136a80何不的BindingList在WPF

我需要知道,为什么微软认为,BindingList不正确支持WPF ...

这是什么不适用于WPF中的BindingList?我觉得它很有用,因为它是。到目前为止,我个人还没有发现BindingList任何慢或更多的内存负载。

加WPF ItemsControlsItemsTemplatesStylesHierarchies工大与BindingList太迟了。他们同样可观察。

作为一个铁杆WPF开发人员自己和ObservableCollection风扇,我的信心是越来越被被-还有全熟,那BindingList ....

我为什么要使用ObservableCollection过的BindingList动摇? (保持预留INotifyPropertyChanged的其中两个必须实现的项目属性更改)

+0

http://stackoverflow.com/questions/4284663/difference-between-observablecollection-and-bindinglist – 2012-03-02 11:41:52

+2

@Leom的可能的复制,该线程也犯规回答的问题比如'BindingList'有什么问题? – 2012-03-02 11:46:23

+2

ObservableCollection已经通知何时添加或删除项目。您不必实现INotifyPropertyChanged。 – dcarneiro 2012-03-02 11:51:26

回答

16

这可能会感兴趣:

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

最重要的段落:

但实现不结垢,它很慢,它与更大的名单表现相当。如果您的元素类型支持INotifyPropertyChanged,那么每次其中一个元素引发属性更改事件时,整个列表都会被用来找出引发该事件的项目列表中的索引!当我第一次意识到这一点时,我感到震惊。您看到BindingList实际上只是Collection上的一个相当薄的包装器,所以没有与每个条目关联的元数据,元素PropertyChanged事件的所有绑定都指向单个处理程序,并且它获取的所有内容都是源和名称的更改属性,因此无法在不执行搜索的情况下在ListChangedEventArgs中包含NewIndex参数。 (默认情况下,这个搜索甚至使用默认的对象比较器,所以如果你碰巧在你的列表中有两个不同但有时候是相同的对象,那么享受结果...)

另一个侧面说明 - AddNew,BindingList具有哪个收集不 - 也不会缩放。它必须使用IndexOf来查找列表中新添加的项目在需要取消添加的情况下结束的位置,因为它支持派生类型中的自动排序。 (的BindingList不支持自动排序本身...)

+0

太棒了! Thx一吨!这是我想知道的...级联项目更改通知!我的信心恢复了。 :-) – 2012-03-02 13:44:45

+12

链接条目的标题是“BindingList不缩放”。有趣的,但仔细阅读 - 只有在评论部分,你是否发现作者的应用程序是不寻常的,他希望在他的用户界面上实时显示大量的更新。不太可能成为更常见的UI场景中的问题。 – 2013-07-02 19:00:00

+1

所以它安全地说,绑定列表在99%的wpf应用程序中工作正常 – MegaMind 2015-05-03 06:27:49