2010-10-21 92 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