2010-09-29 47 views
2

使用CollectionViewSource.View.Filter屬性而不是CollectionViewSource.Filter事件之間的一些實際差異是什麼?是否有情況需要使用一個或者是一個偏好問題?CollectionViewSource過濾事件vs屬性

乾杯,
Berryl

編輯: 我也看到,文檔說:「如果您的視圖對象來自一個CollectionViewSource對象,請在應用設置的事件處理程序的過濾器事件過濾邏輯。」儘管沒有什麼能阻止你在視圖上設置屬性,但它沒有說明爲什麼這樣做。

我在CollectionViewSource上設置事件迄今爲止發現的優點是,您可以在一個事件處理程序中實現所有過濾邏輯,然後使用View.Refresh(或View.DeferRefresh)作爲用戶調用它更改過濾標準。

+0

你可以在這裏找到答案:http://bea.stollnitz.com/blog/?p=31我建議你讀她約的CollectionView其他職位:) – Bruno 2011-04-12 11:33:45

回答

0

在CollectionViewSource中設置Filter事件意味着即使沒有需要的過濾也會調用該事件,這會使過程效率降低。

使用Filter事件的官方方式是在過濾時添加它,稍後在清除過濾器時將其刪除。

viewsource.Filter += viewsource_Filter;

然後:

viewsource.Filter -= viewsource_Filter; //你知道有多少事件有怎麼辦!?

如果您使用該事件,則必須確保每次過濾器值發生更改時都不添加該事件,因爲除了存在潛在的冗餘事件(=應用程序無法工作)之外,您必須刪除所有的事件,以清除過濾器。

因此,使用Filter屬性具有優勢,因爲通過將屬性設置爲null可以更輕鬆地清除過濾器。

viewsource.view.Filter = null;