2011-07-17 85 views
0

我的問題是這樣說:綁定到CollectionViewSource問題

我有兩個列表框:類型照片的

一個必然的集合稱爲照片和其他勢必被綁定到一個CollectionViewSource相同的照片集合。

listBox1中 - >照片(這裏爲ListBox勢必照片默認的CollectionView,當然並沒有直接將照片)。

ListBox2 - > CVS - >照片

兩個集合(默認一個和我的CVS)有一個過濾器,可以將他們顯示的項目從8個項目減少到5個項目。

現在我有2個標籤。一個綁定到照片對象的Count屬性,另一個綁定到Count屬性,其中源是cvs(我的CollectionViewSource)對象。

第一個標籤顯示數字8,因爲我看到它,這是因爲計數的照片保持8,即使我過濾它的默認CollectionViewSource。

第二標籤顯示數字5.

什麼我瞭解結合到CVS是WPF從CVS unwrapps源對象與路徑= Count是相關的基本對象,其是照片和所述這裏的數字也應該是8。

有人能解釋我在哪裏我worng?

謝謝!

回答

2

綁定不會綁定到源集合,而是綁定到視圖。集合視圖還具有Count屬性,該屬性返回(過濾的)視圖中的項目數量,而不是原始集合中的項目數量。

(可以使用調試器看到CollectionViewSourceView屬性通常將是一個對象,它是的CollectionView或其子類之一的實例。該結合將隱式綁定到View.Count

要綁定到原始計數,請使用路徑SourceCollection.Count

+0

1)我們正在談論CollectionViewSource對象,而不是他,也不CollectionViewSource.View確實當你想綁定到包裝對象(在這種情況下CollectionViewSource對象的屬性有一個Count屬性格式 2))設置了在綁定對象中將BindsDirectlyToSource綁定爲true。這意味着我們不想從CVS對象中解開我們的源對象,並且我們想綁定到CVS對象上的屬性。 3)我在我的書Nathan Adam的WPF Unleashed中讀到它。 – yanivps

+0

那麼,事情是集合視圖的默認接口('ICollectionView')沒有任何計數屬性,但對於大多數源集合,您最終會得到一個實現。所以顯示的這個數字確實來自於我在我的答案中鏈接到的屬性,因爲綁定隱式地綁定到通常剛剛存在的'View.Count'。即使綁定到一個「IEnumerable」,綁定系統也會在它周圍創建一個「IList」,所以即使這樣也可能會在視圖中計數。 –

+0

這將有一個計數屬性也可以從以下事實中推導出來:1.您不會自己創建視圖2。框架中只有一個類實現了'ICollectionView'並且是'CollectionView',它具有屬性。 –