Ich habe eine TreeView mit einem Elternknoten und zwei Kinderknoten. Jeder der Knoten enthält ein Kontrollkästchen, das in einem TreeViewItem gespeichert ist. Ich möchte, dass die Kontrollkästchen für die beiden untergeordneten Knoten auf IsChecked = true festgelegt werden, wenn der Benutzer den übergeordneten Knoten überprüft und die Kontrollkästchen für die beiden untergeordneten Knoten als IsChecked = false festgelegt werden sollen, wenn der Benutzer den übergeordneten Knoten deaktiviert.VB.NET WPF NullReference Ausnahme
Ich habe eine for-Schleife, in der die Kontrollkästchen des untergeordneten Knotens in einer Liste gespeichert sind. Das Kontrollkästchen Checkbox/Checkbox des Elternknotens Checkbox sollte die Checkliste der Child-Knoten durchlaufen, aber ich habe ein Problem mit der Liste. Aus irgendeinem Grund ist die Liste im Ereignis "Check-on/Uncheck" des übergeordneten Knotens gleich "nothing". Kann mir jemand erklären, wie ich auf diese Liste zugreifen soll?
hier mein 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
Danke für die Hilfe!
Dank, dass die Nullreference Ausnahme gelöst, aber die childCheckboxes Liste ist noch leer, wenn ich versuche, es in der chkbox_AllChecked Methode zu verwenden, ... Irgendeine Idee, warum es dort leer ist? – zzMzz
Anstatt die Listenelemente per Index zuzuweisen, verwenden Sie die Methode .Add(). –