在WPF中为TreeViewItem创建事件处理程序

0x4*_*9D1 3 wpf treeview binding

我通过ItemsSource属性和ItemTemplate属性将项目添加到TreeView控件中,以设置TreeViewItem的模板。如何添加事件处理程序以处理TreeViewItems上的选择更改事件?
现在,我的ItemTemplate看起来像这样:

<Window.Resources><DataTemplate x:Key="PeerDetailTemplate">
        <TextBlock Text="{Binding DESCRIPTION}" Tag="{Binding ID}" GotFocus="GetModules"/>
</DataTemplate></Window.Resources>
Run Code Online (Sandbox Code Playgroud)

但这不起作用(未调用GetModules)。我对WPF还是陌生的,所以请告诉我正确的方向来做这些事情。

Met*_*urf 5

如果要在TreeView中捕获SelectedItemChanged事件,则需要在父节点上设置事件处理程序,即

XAML

<StackPanel>
    <TreeView SelectedItemChanged="OnTreeViewSelectedItemChanged">          
        <TreeViewItem Header="Desktop">
            <TreeViewItem Header="Computer" />
            <TreeViewItem Header="My Documents" />
            <TreeViewItem Header="c:\" />
        </TreeViewItem>
        <TreeViewItem Header="Recyle Bin" >
            <TreeViewItem Header="foo.txt" />
            <TreeViewItem Header="bar.txt" />
            <TreeViewItem Header="fizz.buzz" />
        </TreeViewItem>
        <TreeViewItem Header="Control Panel" >
            <TreeViewItem Header="Programs" />
            <TreeViewItem Header="Security" />
            <TreeViewItem Header="User Accounts" />
        </TreeViewItem>
    </TreeView>

    <TextBlock Margin="20" x:Name="MyTextBlock" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

背后的代码

private void OnTreeViewSelectedItemChanged( object sender, RoutedPropertyChangedEventArgs<object> e )
{
    MyTextBlock.Text = ( (TreeViewItem) ( (TreeView) sender ).SelectedItem ).Header.ToString();
}
Run Code Online (Sandbox Code Playgroud)