(это продолжение предыдущего вопроса. Исключение NullReference VB.NET WPF )
У меня есть TreeView с родительским узлом и двумя дочерними узлами. Каждый из узлов содержит флажок, сохраненный в TreeViewItem. Я хочу, чтобы флажки двух дочерних узлов были установлены на IsChecked = true, когда пользователь проверяет родительский узел, и я хочу, чтобы флажки двух дочерних узлов были IsChecked = false, когда пользователь снимает флажок с родительского узла.
У меня есть цикл for, в котором флажки дочерних узлов хранятся в списке. Событие check / uncheck родительского узла должно повторяться в списке флажков дочернего узла, но у меня возникла проблема со списком childCheckboxes в функции chkbox_AllChecked (событие checkbox / uncheck родительского узла). По какой-то причине список пуст. Я думаю, проблема в том, как я пытаюсь заполнить список в цикле For. Может кто-нибудь объяснить, что я делаю не так?
Вот мой код:
Public Class Question
Dim childCheckbox As CheckBox
Dim childCheckboxes As New List(Of 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
Dim i As Integer = 0
Dim childCheckboxes(sites.Length) As CheckBox
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 c In childCheckboxes
c.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
Спасибо за помощь!