2016-03-23 6 views
0

erhalten, ist es eine Möglichkeit, auf „Geprüft“ -Ereignis in Brand gesteckt, hinter das aktuelle „MyClass“ Element im Code erhalten Sie den Code unten angegeben:Wie aktuelles Element auf Kontrollkästchen in WPF

<TreeView Name="TreeViewName"> 
      <TreeView.Resources > 
       <HierarchicalDataTemplate DataType="{x:Type local:MyClass}" ItemsSource="{Binding Children}"> 
        <StackPanel Orientation="Horizontal"> 
         <CheckBox IsChecked="{Binding Checked}" VerticalAlignment="Center" Checked="OnExplorerCheck" ></CheckBox> 
         <Image Source="{Binding Icon}" Height="15" Margin="5,0,0,0"></Image> 
         <Label Content="{Binding Name}"></Label> 
        </StackPanel> 
       </HierarchicalDataTemplate> 
      </TreeView.Resources> 
     </TreeView> 

I‘ Wenn Sie ein Kontrollkästchen aktivieren, können Sie alle Daten des aktuellen Elements der Baumansicht abrufen. Beachten Sie, dass "MyClass" eine beliebige Anzahl von Eigenschaften haben kann und ich möchte auf alle zugreifen können. Gibt es eine Möglichkeit für mich, dies zu tun?

Antwort

1

Ich würde vorschlagen, zu MVVM-Ansatz beizubehalten und Änderungen des überprüften Status im ViewModel des Elements, aber in Code hinter was Sie wollen, könnte mit Routingereignissen erreicht werden.

In Ihrem TreeView CheckBox.Checked abonniert Routingereignis:

<TreeView Name="TreeViewName" CheckBox.Checked="TreeViewName_Checked"> 

In Code hinter Ihnen erreichen kann CheckBox als OriginalSource Feld entspricht, und den Zugang zu seiner Datacontext, das wäre eine Instanz von MyClass sein:

private void TreeViewName_Checked(object sender, RoutedEventArgs e) 
    { 
     var checkBox = e.OriginalSource as CheckBox; 

     MyClass dataContext = checkBox?.DataContext as MyClass; 

     if (dataContext != null) 
     { 
      // Do something with MyClass instance 
     } 
    } 
+1

danke fremder! Ich bin gegangen und habe es anders gemacht, aber das wird in Zukunft gut gehen! –

Verwandte Themen