Question

Est-il possible de dire quand les conteneurs sont finis réalisés pour un ListView?

Une explication détaillée de ce que je l'ai fait jusqu'à présent

J'ai un contrôle ListView qui a un DataTemplate dans l'une de ses colonnes qui contient un contrôle CheckBox .. J'ai compris comment accéder au CheckBox dynamiquement en utilisant l'objet que le ListView est lié.

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

Le problème est que les cases à cocher « reset » (devenu sans contrôle) à chaque fois que je fais défiler trop loin ou chaque fois que je trier les colonnes. Je me suis dit c'était parce que le VirtualizingStackPanel n'a été crachait conteneurs pour les ListViewItems qui étaient visibles (ou presque visible) .. Et parce que le CheckBox est à l'intérieur d'un DataTemplate qui est défini dans le XAML, il se jette à chaque fois qu'il sort de vue ou lorsque la liste est triée.

Je suis autour de cela en créant une liste séparée des cases à cocher et en utilisant les événements réels CheckBoxes « cliquez sur » pour changer l'état de la case correspondante dans ma liste .. puis fait une petite méthode pour aller changer l'état de tous les visibles CheckBoxes chaque fois que l'utilisateur fait défiler ... par conséquent, il semble que cela devrait avoir en premier lieu.

Sauf quand je trier les colonnes. J'ai essayé en fait refaire les cases à cocher (comme avant) juste après ce serait une colonne triée, mais cela n'a pas fonctionné. Ma meilleure estimation est qu'il ne fait pas immédiatement les conteneurs après que je sorte ..

Est-il possible de dire quand les conteneurs sont finis réalisés pour un ListView?

Était-ce utile?

La solution

Si vous liez vos cases isChecked propriété à une propriété booléenne sur votre contexte de données, alors vous n'aurez pas ce problème.

Le but de VirtualizingStackPanel est de réduire l'utilisation de la mémoire en ne créant pas de ListItem à moins que nécessaire.

En effet, vous devez déplacer du côté des données de la case loin du contrôle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top