2012-02-22 51 views
0

對於那些熟悉它的人來說,Wpf綁定是有趣的,對於新手來說這是一場噩夢。 如果我將ComboBox綁定到註釋掉的CollectionView,控件將顯示所有元素,包括過濾器排除的元素。如果我將相同的組合框綁定到ICollectionView,它將只顯示過濾元素,並且它是正常的。將組合框綁定到CollectionView會顯示過濾掉的元素。爲什麼?

//public CollectionView MyCapitoliList { get; private set; } 
public ICollectionView MyCapitoliList { get; private set; } 

下面是我用它來創建的CollectionView代碼和ICollectionView

MyCapitoliList = CollectionViewSource.GetDefaultView(listaCapitoli); 
//MyCapitoliList = new CollectionView(listaCapitoli); 


MyCapitoliList.Filter = new Predicate<object>(isCapitoloMaster); 

我檢查的CollectionView打印從C#代碼的所有元素,它僅包含過濾元素,所以的CollectionView是好的。 爲什麼我將所有未過濾元素都綁定到組合框?

感謝 菲利波

+0

您尚未在此處顯示所有代碼。你能否顯示你正在使用的代碼 - 並認爲應該工作,綁定到列表的集合,並省略任何註釋掉的代碼。 – ColinE 2012-02-22 08:26:48

回答

1

MSDN說,大約CollectionView類...

你不應該在你的代碼中創建該類的對象。要爲僅實現IEnumerable的集合創建 集合視圖,請創建CollectionViewSource對象,將集合添加到 Source屬性,然後從View屬性中獲取集合視圖。

這進一步增加了...

在WPF應用程序,所有集合有關聯的默認 集合視圖。綁定引擎始終通過關聯的 視圖訪問集合,而不是直接使用集合。要獲取默認視圖,請使用 CollectionViewSource.GetDefaultView方法。

+0

好吧,但CollectionViews應該用於什麼? – Filippo 2012-02-22 10:32:56