WPF-需要在VirtualzingStackPanel为ListView创建项时发生事件

WPF-需要在VirtualzingStackPanel为ListView创建项时发生事件,wpf,listview,controls,datatemplate,virtualizingstackpanel,Wpf,Listview,Controls,Datatemplate,Virtualizingstackpanel,是否有任何方法可以告诉ListView的容器何时完成制作 到目前为止我所做工作的详细说明 我有一个ListView控件,其中一列中有一个DataTemplate,其中包含一个复选框控件。。我已经了解了如何使用ListView绑定到的对象动态访问复选框 ListViewItem lItem = (ListViewItem)ListView.ItemContainerGenerator.ContainerFromItem(trackToHandle);

是否有任何方法可以告诉ListView的容器何时完成制作

到目前为止我所做工作的详细说明

我有一个ListView控件,其中一列中有一个DataTemplate,其中包含一个复选框控件。。我已经了解了如何使用ListView绑定到的对象动态访问复选框

                ListViewItem lItem = (ListViewItem)ListView.ItemContainerGenerator.ContainerFromItem(trackToHandle);
                CheckBox checkBoxToHandle = FindChild<CheckBox>(lItem, "CheckBox");
ListViewItem lItem=(ListViewItem)ListView.ItemContainerGenerator.ContainerFromItem(trackToHandle);
CheckBox checkBoxToHandle=FindChild(lItem,“CheckBox”);
问题是,每当我滚动太远或对列排序时,复选框都会“重置”(未选中)。 我发现这是因为VirtualzingStackPanel只为那些可见(或几乎可见)的ListViewItems吐出容器。。 由于该复选框位于XAML中定义的数据模板中,因此每当它离开视图或对列表进行排序时,它都会被丢弃

我创建了一个单独的复选框列表,并使用实际的复选框“单击”事件来更改列表中相应复选框的状态,从而绕过了这个问题。。然后做了一个小方法去改变所有可见复选框的状态,每当用户滚动。。。因此,它看起来就像它应该在第一位

除非我对列进行排序。 我试着让它在对一列进行排序后立即重新做复选框(像以前一样),但没有成功。 我最好的猜测是,在我分类后,它不会立即制造容器


是否有任何方法可以告诉ListView的容器何时完成制作

如果将复选框IsChecked属性绑定到数据上下文中的布尔属性,则不会出现此问题

VirtualzingStackPanel的全部目的是减少内存使用,除非需要,否则不创建ListItem


实际上,您需要将复选框的数据端从控件中移开。

如果您将复选框IsChecked属性绑定到数据上下文中的布尔属性,则不会出现此问题

VirtualzingStackPanel的全部目的是减少内存使用,除非需要,否则不创建ListItem


实际上,您需要将复选框的数据端从控件中移开。

哇,效果非常好。谢谢。。我试图做所有这些额外的事情,而这解决了它,甚至没有额外的XAML行。非常感谢,老兄,这真的很有效。谢谢。。我试图做所有这些额外的事情,而这解决了它,甚至没有额外的XAML行。谢谢你,伙计