2010-10-21 91 views
1

有什麼方法可以告訴什麼時候完成一個ListView的容器?WPF-需要一個事件,當VirtualizingStackPanel創建ListView項目

我已經想通了如何訪問的什麼我迄今所做

我有在包含CheckBox控件的一列有一個DataTemplate ListView控件..詳細說明CheckBox動態使用ListView綁定的對象。

   ListViewItem lItem = (ListViewItem)ListView.ItemContainerGenerator.ContainerFromItem(trackToHandle); 
       CheckBox checkBoxToHandle = FindChild<CheckBox>(lItem, "CheckBox"); 

的問題是複選框「復位」(成爲未選中),每當我滾動太遠,否則每當我的列進行排序。 我想到這是因爲VirtualizingStackPanel只是吐出那些可見(或幾乎可見)的ListViewItems容器。 而且由於CheckBox在XAML中定義的DataTemplate內部,每次它熄滅時它就會被扔掉的視圖或列表排序的時間。

我通過創建一個單獨的CheckBoxes列表並使用實際的CheckBoxes「click」事件來改變我列表中相應的CheckBox的狀態,然後提出了一個小小的方法來改變所有的狀態當用戶滾動時可見的複選框...因此它看起來就像它應該放在第一位。

除了對列進行排序時。 我試圖讓它重新做CheckBoxes(就像之前一樣),但它沒有起作用。 我最好的猜測是,它不會立即使我的排序後的容器..

有沒有什麼辦法來告訴什麼時候容器完成了一個ListView?

回答

1

如果您將複選框IsChecked屬性綁定到數據上下文中的布爾屬性,那麼您將不會遇到此問題。

VirtualizingStackPanel的整個目的是通過不創建ListItem來減少內存使用,除非需要。

實際上,您需要將複選框的數據側從控件移開。

+0

哇,這真的很好。非常感謝..我試圖做所有這些額外的東西,並解決它甚至沒有一個額外的XAML行。非常感謝 – Ryan 2010-10-21 04:23:34