有没有办法告诉容器何时完成为ListView制作?
到目前为止我所做的详细解释
我有一个ListView控件,其中一个包含CheckBox控件的列中有一个DataTemplate。我已经想出了如何使用ListView绑定的对象动态访问CheckBox。
ListViewItem lItem = (ListViewItem)ListView.ItemContainerGenerator.ContainerFromItem(trackToHandle);
CheckBox checkBoxToHandle = FindChild<CheckBox>(lItem, "CheckBox");
问题是每当我滚动太远或每次对列进行排序时,CheckBox都会“重置”(取消选中)。 我想出这是因为VirtualizingStackPanel只是为那些可见(或几乎可见)的ListViewItem吐出容器。 并且因为CheckBox位于XAML中定义的DataTemplate内部,所以每当它离开视图或列表被排序时它就会被抛弃。
我通过创建一个单独的CheckBoxes列表并使用实际的CheckBoxes“click”事件来改变我列表中相应CheckBox的状态来解决这个问题。然后做了一个小方法来改变所有可见的状态用户滚动时CheckBoxes ...因此它看起来应该首先出现。
除非我对列进行排序。 我试图让它在排序列之后立即重新做CheckBoxes(就像之前一样),但它没有用。 我最好的猜测是,在我排序后它不能立即制作容器。
有没有办法告诉容器何时完成为ListView制作?
答案 0 :(得分:1)
如果将复选框IsChecked属性绑定到数据上下文的布尔属性,则不会出现此问题。
VirtualizingStackPanel的全部目的是通过不创建ListItem来减少内存使用量,除非需要。
实际上,您需要将复选框的数据面移离控件。