Как получить объекты, которыми был заполнен WPF Treeview? - PullRequest
0 голосов
/ 10 января 2019

У меня есть древовидное представление, связанное с простыми узлами, каждая из которых содержит две строки (Expression, Exp2) и список узлов (Children).
Я также сделал так, чтобы при двойном щелчке по определенному текстовому полю возникало событие, которое дает мне 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 голосов
/ 10 января 2019

ОК, это сложно.

  1. Получить родительский элемент TreeViewItem (как ItemsControl)

    var parent = ItemsControl.ItemsControlFromItemContainer(item);
    
  2. Затем используйте родительский ItemContainerGenerator, чтобы получить такие данные:

    var node = parent?.ItemContainerGenerator?.ItemFromContainer(item);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...