2009-09-07 10 views
13

Chciałbym uzyskać wydarzenie dla każdej ekspansji treeviewitem w moim widoku drzewa.Zdarzenie OnExpanded dla dowolnego elementu w widoku drzewa

Powód tego, trochę nie związany z pierwotnym pytaniem: Tworzę drzewo, które ściśle wiąże się z drzewem pliku xml, ale pozwalam elementowi include w pliku xml, aby drzewo mogło przechodzić przez wiele plików . Chciałbym ustawić właściwość itemssource z treeviewitems w moim widoku drzewa po ekspansji.

Odpowiedz

27

Można użyć zdarzenia TreeViewItem.Expanded jako załącznik imprezy:

<TreeView TreeViewItem.Expanded="TreeViewItem_Expanded" 
      ItemsSource="{Binding}"> 
    ... 
</TreeView/> 

W kodu źródłowego, można zidentyfikować TreeViewItem który zainicjował zdarzenie przy użyciu właściwości OriginalSource:

private void TreeViewItem_Expanded(object sender, RoutedEventArgs e) 
    { 
     TreeViewItem tvi = e.OriginalSource as TreeViewItem; 
     if (tvi != null) 
     { 
      MessageBox.Show(string.Format("TreeNode '{0}' was expanded", tvi.Header)); 
     } 
    } 
+0

jeśli masz na myśli wizualni potomkowie, możesz je zdobyć poprzez ItemsContainerGenerator TreeViewItem –

+0

To było bardzo pomocne, dziękuję, chciałbym otrzymać nagrodę. Podsumowanie końcowe: Twoi wizualni potomkowie, których chciałem, nie zostali jeszcze stworzeni podczas rozszerzonego wydarzenia. W zdarzeniu rozszerzeń zapisałem OriginalSource, a następnie w arbitralnej metodzie konwertera dla powiązania, otrzymałem wizualny potomek z ItemContainerGenerator.ContainerFromIndex (i) i zaktualizowałem ItemsSource. –

Powiązane problemy