《WPF列表控件数据源List<T>无法自动更新问题》

解决List作为数据源绑定到WPF列表控件(如ListView、ListBox等)后,数据变动控件界面不能自动更新问题。

---->  用BindingList或者ObservableCollection替代。

这个问题的本质:List没有实现INotifyCollectionChanged接口,而不是INotifyPropertyChanged接口。所以即使在List属性中人工加上了INotifyPropertyChanged接口的实现(NotifyPropertyChanged方法),也没有效果。

两个替代方法(BindingList、ObservableCollection)的异同之处:这两个类均支持双向绑定,但都没有排序功能,也就是没有Sort方法。

BindingList -- System.ComponentModel

ObservableCollection -- System.Collections.ObjectModel

这两个类,即使使用自动属性,不实现INotifyPropertyChanged接口;只要集合改变(项目加减),就能自动实现数据的更新。但是对于集合内项目自身属性的改变(项目内的属性变化),还是需要实现实现INotifyPropertyChanged接口才能自动更新。

【微软推荐WPF集合控件使用ObservableCollection

《BindingList类》

BindingList

《ObservableCollection类》

ObservableCollection

Stackoverflow上说:

To be short, ObservableCollection does not listen to changes in its children but only to Insert and Remove events.

On the other side BindingList does listen to changes and updates raised by its children. But because Binding list must listen to all its children

winforms - ObservableCollection(Of T) vs BindingList(Of T)? - Stack Overflow

但是实际测试中并没有测出来。

你可能感兴趣的:(wpf,list,数据结构)