2010-11-18 15 views
0

j'ai une fenêtre WPF avec un TreeView qui contient une case à chaque noeud. Je veux être capable de capturer l'état des cases à cocher mais je ne sais pas comment. (Je suis en train de le faire sans écrire beaucoup de code XML)(WPF VB.Net) Comment obtenir l'état d'une case à cocher qui est imbriqué dans un TreeView?

Voici ce que j'ai dans le fichier 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> 

Et dans le Code 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 

Merci pour l'aide!

Répondre

1
... 
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