如何检索填充 WPF Treeview 的对象?

How do I retrieve the objects with which a WPF Treeview was populated?

我有一个绑定到简单节点的树视图,每个节点包含两个字符串 (Expression, Exp2) 和一个节点列表 (Children)。
我还这样做了,以便当双击特定的文本框时,它会引发一个给我一个 TreeViewItem 的事件。

如何从那里到达创建 TreeViewItem 的节点?[​​=11=]

<TreeView x:Name="treeView" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="20,80,20,20">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate DataType="{x:Type local:Node}"
                                  ItemsSource="{Binding Children}">
                <Grid>
                    <TextBlock Text="{Binding Expression}"/>
                    <!--<TextBlock Text="{Binding Exp2}"/>-->
                </Grid>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
        <TreeView.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}">
                <EventSetter Event="MouseDoubleClick" Handler="TreeViewItem_MouseDoubleClick"/>
            </Style>
        </TreeView.ItemContainerStyle>

    </TreeView>


private void TreeViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        if(sender is TreeViewItem)
        {
            if (!((TreeViewItem)sender).IsSelected)
            {
                return;
            }
            TreeViewItem item = (TreeViewItem)sender;
            //???
            //Profit
        }
    }

好的,这很复杂。

  1. 获取 TreeViewItem 的父项(作为 ItemsControl

    var parent = ItemsControl.ItemsControlFromItemContainer(item);
    
  2. 然后使用parent的ItemContainerGenerator得到这样的数据:

    var node = parent?.ItemContainerGenerator?.ItemFromContainer(item);