2011-04-10 90 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 ...