2016-11-29 43 views
0

ImageAlbumsICollectionView類型和GlobalCollection.MyImageAlubmsObservableCollection<T>類型。過濾問題與ICollectionView

ImageAlbums = CollectionViewSource.GetDefaultView(GlobalCollection.MyImageAlubms); 
ImageAlbums.Filter = new Predicate<object>(this.FilterImageAlbumList); 

在視圖中,我使用ImageAlbums顯示過濾圖像列表。我使用FilterImageAlbumList方法過濾了列表。問題是我在另一個地方使用了GlobalCollection.MyImageAlubms。在這個視圖中,我直接使用了GlobalCollection.MyImageAlubms作爲源代碼,但在那裏,列表也顯示爲已過濾。我在這裏也提供了過濾器的方法,下面的代碼代表的過濾方法

private bool FilterImageAlbumList(object item) 
{ 
    AlbumModel albumMoel = (AlbumModel)item; 
    if(LOGIC_OF_FILTERING) 
    { 
     return false; 
    } 
    return true; 
} 

有什麼辦法只有ImageAlbums過濾不影響GlobalCollection。僅供參考 - 我不會深度複製全球收藏。

+0

由於item是一個對象,所以你可以測試這個類型。每個類都有不同的類型枚舉。 – jdweng

+0

您可以創建新的'{CollectionViewSource來源= GlobalCollection.MyImageAlubms} .View一個新的觀點;但是'我發現在過去的這個越野車(http://stackoverflow.com/questions/37166747/object-reference-not -set到一個實例 - - 一個對象,在-presentationframework的),最終只創建副本... – Joe

+0

@Joe,如果您發現此車爲什麼你的建議呢? – lukai

回答

2

你的問題是由這兩個事實造成的:

  1. 每個集合實例都有只有一個默認視圖(實例),從而CollectionViewSource.GetDefaultView總是返回相同的情況下,對相同參數
  2. WPF約束機制不直接綁定到一個集合,但其默認集合視圖

所以,如果你設置一個過濾接在默認視圖中,無論您綁定到集合的哪個位置,都會顯示其效果。

如果你想要一個單獨的實例ICollectionView你最好的選擇是手動實例化它。對於ObservableCollection<T>,一個不錯的選擇是ListCollectionView。所以這應該可以解決你的問題:

ImageAlbums = new ListCollectionView(GlobalCollection.MyImageAlubms);