Проблема с выбором элемента "из кода" TreeView - PullRequest
0 голосов
/ 05 июня 2019

В моем WPF у меня есть два TreeView.Один - это классы, а другой - для тестирования данных для некоторых элементов.Теперь я пытаюсь сделать следующее: когда вы дважды щелкнете по узлу в дереве классов, в дереве элементов соответствующий узел должен развернуться и выбрать элемент внутри.Дерево выглядит так:
-Main Node: -Elements #Name# : -element 1 -element 2 -element 3 -element 4 -Elements #Other Name# : -...
Каждый «Элемент» представляет собой TreeViewItem, а каждый «элемент» представляет собой текстовый блок с большим количеством экспериментальных данных.

Я просто перебираю дерево, пока не найду «Элементы» с соответствующим именем, затем просматриваю его Предметы («элемент») и затем выбираю его.
Но есть странный случай: вклпри первом запуске он успешно раскрывает «Элементы», которые мне нужны, но не может выбрать «элемент» внутри с ItemContainerGenerator, давая мне значение NULL, хотя при любом другом запуске, кроме первого, он будет прекрасно работать внутри этих «Элементов», независимо от того, что яделать с деревом (расширение, свертывание, приклеивание к другому дереву).Что может быть не так?

private void TestTreeSearchAndExpand(TreeViewItem SearchedItem, string IHeader, string pin-name)
    {
        if (SearchedItem != null)
        {
            if (SearchedItem.Name.ToString() == IHeader)
            {
                SearchedItem.IsExpanded = true;
                foreach(FrameworkElement x in SearchedItem.Items)
                {
                    if (x.Name == pinname)
                    {
                        TreeViewItem PContainer = SearchedItem.ItemContainerGenerator.ContainerFromItem(x) as TreeViewItem;
                        if (PContainer != null)
                        {
                            PContainer.BringIntoView();
                            PContainer.IsSelected = true;
                        }

                    }
                }
            }
            else
            {
                if (SearchedItem.HasItems)
                {
                    foreach (var item in SearchedItem.Items)
                    {
                        TreeViewItem tmp = item as TreeViewItem;
                        TestTreeSearchAndExpand(tmp, IHeader, pinname);
                    }
                }
            }
        }
    }
...