J'ai un TreeView avec un nœud parent et deux enfants. Chacun des nœuds contient une case à cocher stockée dans un TreeViewItem. Je souhaite que les cases à cocher des deux enfants soient définies sur IsChecked = true lorsque l'utilisateur vérifie le nœud parent et que les cases à cocher des deux enfants soient IsChecked = false lorsque l'utilisateur désactive le nœud parent.Exception VB.NET WPF NullReference
J'ai une boucle for dans laquelle les cases à cocher du nœud enfant sont stockées dans une liste. L'événement check/uncheck du nœud parent checkbox doit parcourir la liste des cases du nœud enfant, mais je rencontre un problème au niveau de la liste. Pour une raison quelconque, la liste est égale à "rien" dans l'événement check/uncheck du nœud parent. Quelqu'un peut-il expliquer comment je devrais accéder à cette liste?
Voici mon code:
Public Class Question
Dim childCheckbox As CheckBox
Dim childCheckboxes() As CheckBox
Public Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
Dim parentCheckbox = New CheckBox
Dim parentNode = New TreeViewItem
parentCheckbox.Uid = "All Sites"
AddHandler parentCheckbox.Checked, AddressOf chkbox_AllChecked
AddHandler parentCheckbox.Unchecked, AddressOf chkbox_AllUnchecked
parentCheckbox.Content = "All Sites"
parentNode.Header = parentCheckbox
For Each osite In sites
Dim childNode = New TreeViewItem
Dim childCheckbox = New CheckBox
AddHandler childCheckbox.Checked, AddressOf chkbox_Checked
AddHandler childCheckbox.Unchecked, AddressOf chkbox_Unchecked
childCheckbox.Uid = osite.SiteName.ToString
childCheckbox.Content = osite.SiteName.ToString
childNode.Header = childCheckbox
parentNode.Items.Add(childNode)
'Add all childCheckbox to an array for use by parentChildbox methods to check/uncheck all
childCheckboxes(i) = childCheckbox
i += 1
Next
TreeView1.Items.Add(parentNode)
End Sub
Private Sub chkbox_AllChecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim chk = DirectCast(sender, CheckBox)
'MessageBox.Show(chk.Uid.ToString)
'This part doesn't work.
For Each child In childCheckboxes
child.IsChecked = True
Next
End Sub
Private Sub chkbox_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim chk = DirectCast(sender, CheckBox)
'MessageBox.Show("Check!")
MessageBox.Show(chk.Uid.ToString)
End Sub
Private Sub chkbox_Unchecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim chk = DirectCast(sender, CheckBox)
'MessageBox.Show("Uncheck!")
MessageBox.Show(chk.Uid.ToString)
End Sub
End Class
Merci pour l'aide!
Merci qui ont résolu l'exception NullReference mais la liste des childCheckboxes est encore vide lorsque je tente de l'utiliser dans la méthode chkbox_AllChecked ... Une idée de pourquoi il est vide là? – zzMzz
Au lieu d'affecter les éléments de liste par index, utilisez la méthode .Add(). –