Domanda

C'è un modo di dire quando i contenitori sono finiti compiuti per un ListView?

Una spiegazione di quello che ho fatto finora

dettagliato

Ho un controllo ListView che dispone di un DataTemplate in una delle sue colonne che contiene un controllo CheckBox .. Ho capito come accedere al CheckBox dinamicamente utilizzando l'oggetto che la ListView è destinato a.

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

Il problema è che le caselle di controllo "Reset" (diventare incontrollato) ogni volta che ho scorrere troppo o ogni volta che ordinare le colonne. Ho capito che questo era perché il VirtualizingStackPanel stava solo sputando contenitori per quei ListViewItems che erano visibili (o quasi visibile) .. E poiché la casella è all'interno di un DataTemplate che viene definito nel XAML che si butta via ogni volta che si va fuori dalla visuale o quando l'elenco è ordinato.

ho ottenuto intorno a questo con la creazione di un elenco separato di caselle di controllo e utilizzando le caselle di controllo effettivo "click" evento per modificare lo stato del corrispondente CheckBox nella mia lista .. poi fatto un po 'di metodo per andare cambiare lo stato di tutto il visibile CheckBoxes ogni volta che l'utente scorre ... come risultato appare come dovrebbe avere in primo luogo.

tranne quando ordinare le colonne. Ho provato a fare è ri-fare le caselle di controllo (come prima) subito dopo che sarebbe risolto una colonna, ma non ha funzionato. La mia ipotesi migliore è che non fa subito i contenitori dopo I sorta ..

C'è un modo di dire quando i contenitori sono finiti compiuti per un ListView?

È stato utile?

Soluzione

Se si associa il tuo caselle IsChecked proprietà a una proprietà booleana sul contesto dati, allora non avere questo problema.

Lo scopo del VirtualizingStackPanel è ridurre l'utilizzo della memoria, non creando di ListItem meno necessario.

In effetti, è necessario spostare il lato dati della casella di controllo via dal controllo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top