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

时间:2019-01-10 15:33:48

标签: c# wpf binding treeview

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

如何从那里到达制作TreeViewItem的节点?

<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 个答案:

答案 0 :(得分:1)

好,这很复杂。

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

    var parent = ItemsControl.ItemsControlFromItemContainer(item);
    
  2. 然后使用父级的ItemContainerGenerator获取如下数据:

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