2010-11-19 2 views
0

У меня есть TreeView с родительским узлом и двумя дочерними узлами. Каждый из узлов содержит флажок, хранящийся в TreeViewItem. Я хочу, чтобы флажки двух дочерних узлов были установлены в IsChecked = true, когда пользователь проверяет родительский узел, и я хочу, чтобы флажки двух дочерних узлов были IsChecked = false, когда пользователь отключает родительский узел.VB.NET WPF NullReference Exception

У меня есть цикл for, в котором флажки дочернего узла хранятся в списке. Событие checkbox check/uncheck для родительского узла должно проходить через список флажков дочернего узла, но у меня проблема, связанная со списком. По какой-то причине список равно «ничего» в родительском узле check/uncheck event. Может ли кто-нибудь объяснить, как я должен получить доступ к этому списку?

Вот мой код:

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 

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

ответ

3

Не могли бы вы попробовать изменить строку:

Dim childCheckboxes() As CheckBox 

To:

Dim childCheckboxes as new list(of CheckBox) 
+0

Спасибо, что решить NullReference исключение, но список childCheckboxes еще пуст, когда я пытаюсь использовать его в методе chkbox_AllChecked ... Любая идея, почему она пуста? – zzMzz

+0

Вместо назначения элементов списка по индексу используйте метод .Add(). –

Смежные вопросы