Как заполнить и получить доступ к списку флажков?VB.NET WPF - PullRequest
1 голос
/ 19 ноября 2010

(это продолжение предыдущего вопроса. Исключение 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

Спасибо за помощь!

1 Ответ

0 голосов
/ 20 ноября 2010

Хорошо, я понял это.

1) Мне не нужна эта строка: Dim childCheckboxes (sites.Length) As CheckBox потому что это массив, а не список.

2) После удаления первой строки мне нужно было изменить: childCheckboxes (i) = childCheckbox к этому: childCheckboxes.Add (childCheckbox)

Вот и все! Готово. Остальное работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...