2011-04-10 164 views
1

我使用VS2010 - WPF - C#如何覆盖C#中的CollectionChanged事件?

我有一个列表视图,使用此指令从源获取其项目:

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

的问题是,每次源被更新的时候,我的列表视图没有按没有得到更新?

我知道我必须做的OnCollectionChanged事件的东西,但我不知道该怎么办呢

请帮我这一点。 。 。

回答

0

我不知道为什么你使用的是CollectionViewSource.GetDefaultView(getTicker());

假设getTicker()回报的项目列表,你可以做

this.listView1.ItemsSource = getTicker(); 

如果你想确保你的列表视图更新时源集合那么你必须使用一个实现INotifyCollectionChanged接口的集合,例如ObservableCollection这样做。但是,您必须确保您在UI线程上更新您的集合。

更新:这里是你如何使用ObservableCollection

var TickerData = new ObservableCollection<MyData>(); 
this.listView1.ItemsSource = TickerData; 

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

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

+0

实际上getTicker()函数返回项目 – 2011-04-10 08:59:54

+0

的名单我想做一些像覆盖CollectionChanged事件一样的东西,以便每次集合更改我的列表视图动态更新 – 2011-04-10 09:00:49

+0

覆盖它在哪里?如果你将你的列表视图绑定到一个激发集合更改事件的集合,那么你就完成了。 – ChrisWue 2011-04-10 10:12:21

1

getTicker方法有什么作用?如果每个电话都可以返回一个新的收藏,也许您将替换为收藏,而不是添加/删除元素。我已经看过好几次了......

确保当你有新的项目添加(或全新的项目集合)时: 1.清除集合(getTicker中返回的集合)以清除所有项目 2.添加的所有新项目,以收集

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