有什么方法可以告诉列表视图何时完成容器?

详细说明我到目前为止所做的事情

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

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

问题在于,每当我滚动太远或每当我对列进行排序时,复选框“重置”(不受限制)。我发现这是因为虚拟化stackpanel只是为那些可见的listViewItem吐出容器(或几乎可见)。而且,由于复选框在XAML中定义的DataTemplate内部,每次都不会丢弃它。或列表被排序时。

我通过创建一个单独的复选框列表并使用实际复选框“单击”事件来解决此问题,以更改我列表中相应的复选框的状态。然后,在任何可见复选框中更改所有可见复选框的状态用户滚动...结果,它看起来像应该首先应该具有的。

除非我对列进行排序。我尝试将其重新进行复选框(如前所述),然后再整理一列,但它不起作用。我最好的猜测是,在我排序之后,它不会立即制作容器。

有什么方法可以告诉列表视图何时完成容器?

有帮助吗?

解决方案

如果将复选框绑定到数据上下文上的布尔属性,则将其绑定到Boolean属性,那么您将不会遇到此问题。

虚拟化StackPanel的全部目的是通过不需要创建ListItem来减少内存使用量。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top