如何在C#中覆盖CollectionChanged事件?

时间:2011-04-10 08:40:38

标签: c# wpf

我正在使用VS2010 - WPF - C#

我有一个listview,它使用以下指令从源代码中获取项目:

this.listView1.ItemsSource = CollectionViewSource.GetDefaultView(getTicker());

问题是,每次更新源代码时,我的listview都不会更新?

我知道我必须对OnCollectionChanged事件做点什么,但我不知道怎么做

请帮助我。 。

2 个答案:

答案 0 :(得分:1)

getTicker方法有什么作用?如果每个调用都可以返回一个新集合,那么您可能替换集合而不是添加/删除元素。我已经好几次见过......

确保当您要添加新项目(或全新的项目集合)时:  1.清除集合(在getTicker中返回的集合)以删除所有项目  2.将所有新项目添加到集合

如果你真的不需要CollectionviewSource,只需绑定一个ObservableCollection ......

答案 1 :(得分:0)

我不确定您使用CollectionViewSource.GetDefaultView(getTicker());

的原因

假设getTicker()返回您可以执行的项目列表

this.listView1.ItemsSource = getTicker();

如果要确保在源集合更改时列表视图更新,则必须使用实现INotifyCollectionChanged接口的集合,例如ObservableCollection。但是,您必须确保在UI线程上更新您的集合。

更新:以下是ObservableCollection

的使用方法
var TickerData = new ObservableCollection<MyData>();
this.listView1.ItemsSource = TickerData;

然后你可以在TickerData添加/删除项目,UI会自动更新,因为ObservableCollection实现了INotifyCollectionChanged,它公开了一个CollectionChanged事件处理程序列表视图订阅。

我想你可能想看看some tutorials on WPF