代码之家  ›  专栏  ›  技术社区  ›  zzMzz

(WPF VB.Net)如何获取嵌套在树视图中的复选框的状态?

  •  0
  • zzMzz  · 技术社区  · 14 年前

    我有一个WPF窗口,其中有一个TreeView,在每个节点上都包含一个复选框。我想能够捕获复选框的状态,但我不知道如何捕获。(我试图在不使用XML编写大量代码的情况下完成此任务)

    以下是XML中的内容:

    <TreeView Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="1" Height="200" HorizontalAlignment="Left" Margin="126,299,0,0" Name="TreeView1" VerticalAlignment="Top" Width="220" ItemsSource="{Binding}" DataContext="{Binding}">
    </TreeView> 
    

    在VB代码中:

    Dim site As ELSite
    Dim sites() As ELSite
    
    Dim parentCheckbox = New CheckBox
    Dim parentNode = New TreeViewItem
    
    parentCheckbox.Content = "All Sites"
    parentNode.Header = parentCheckbox
    
    For Each osite In sites
     Dim childNode = New TreeViewItem
     Dim childCheckbox = New CheckBox
     childCheckbox.Content = osite.SiteName.ToString
     childNode.Header = childCheckbox
     parentNode.Items.Add(childNode)
    Next
    
    TreeView1.Items.Add(parentNode)
    
    Private Sub TreeView1_SelectedItemChanged(ByVal sender As System.Object, ByVal e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Object)) Handles TreeView1.SelectedItemChanged
    
    'This event doesn't seem to occur when I check or uncheck a checkbox
    
    End Sub
    

    谢谢你的帮助!

    1 回复  |  直到 14 年前
        1
  •  1
  •   Heinzi    14 年前
    ...
    For Each osite In sites
       Dim childNode = New TreeViewItem
       Dim childCheckbox = New CheckBox
    
       ' add this to your code '
       AddHandler childCheckBox.Checked, AddressOf chkbox_Checked
       AddHandler childCheckBox.Unchecked, AddressOf chkbox_Unchecked
       '-----------------------'
    
       childCheckbox.Content = osite.SiteName.ToString
       childNode.Header = childCheckbox
       parentNode.Items.Add(childNode)
    Next
    ...
    
    
    Private Sub chkbox_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Dim chk = DirectCast(sender, CheckBox)
        ' Do whatever needs to be done when chk has been checked '
    End Sub
    
    Private Sub chkbox_Unchecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Dim chk = DirectCast(sender, CheckBox)
        ' Do whatever needs to be done when chk has been unchecked '
    End Sub