Pregunta

¿Hay alguna manera de saber cuando los contenedores se acaban de ser hecho para un ListView?

Una explicación de lo que he hecho hasta ahora

detalló

Tengo un control ListView que tiene un DataTemplate en una de sus columnas que contiene un control CheckBox .. He descubierto cómo acceder a la casilla de verificación de forma dinámica mediante el objeto de que el ListView está obligado a.

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

El problema es que las casillas de verificación "Reset" (convertido sin marcar) cada vez que me desplazo demasiado o cada vez que ordenar las columnas. Me di cuenta de que esto era debido a que el VirtualizingStackPanel sólo estaba escupiendo contenedores para aquellos ListViewItems que eran visibles (o casi visible) .. Y debido a que la casilla de verificación está dentro de un DataTemplate que se define en el XAML que se tira cada vez que se va fuera de la vista o cuando se ordena la lista.

Tengo todo esto mediante la creación de una lista separada de las casillas de verificación y el uso de las casillas de verificación reales evento "click" para cambiar el estado de la casilla correspondiente en mi lista .. luego hizo un pequeño método para ir cambiar el estado de todo el visible CheckBoxes cada vez que el usuario se desplaza ... como resultado aparece como que debe tener en el primer lugar.

excepto cuando ordenar las columnas. Probé lo que es volver a hacer las casillas de verificación (como antes) justo después de que había a ordenar una columna, pero no funcionó. Mi mejor conjetura es que no lo hace inmediatamente después de los contenedores en cierto modo me ..

¿Hay alguna manera de saber cuando los contenedores se acaban de ser hecho para un ListView?

¿Fue útil?

Solución

Si se unen a sus casillas de verificación IsChecked propiedad a una propiedad booleana en el contexto de datos, entonces usted no tiene este problema.

Todo el propósito de la VirtualizingStackPanel es reducir el uso de memoria al no crear de ListItem menos que sea necesario.

En efecto, es necesario mover el lado de los datos de la casilla de distancia desde el control.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top