TreeView не полностью расширяется и не выбирает элементC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 TreeView не полностью расширяется и не выбирает элемент

Сообщение Anonymous »

Я работаю с TreeView в своем приложении и имею следующую структуру:

Код: Выделить всё

-Main
--Test Category A
---A.1
----T1
----T2
--Test Category B
---B.1
----T1
----T2
Когда элемент (например, T.1) выбирается в окне поиска, я хочу, чтобы TreeView автоматически расширялся и выбирал соответствующий узел.
Ожидаемое поведение:
Если выбран T.1, TreeView должен развернуться следующим образом:

Код: Выделить всё

-Main
--Test Category A
---A.1
----T1
и выделите/выберите T.1.
Текущее поведение:
При запуске кода только родительский узел (-Main) расширен, но (категория теста A) и (A.1) не расширены.
Если я вручную разверну и свернут TreeView заранее, код будет работать так, как ожидалось, полностью раскрывая и выбирая правильный узел.
вот мой фрагмент кода в моем MainWindow.xaml.cs:

Код: Выделить всё

public void SelectTreeViewItem(TestCaseNode selectedItem)
{
if (selectedItem == null)
return;

TestCasesTree.UpdateLayout();

var tvi = FindTviFromObjectRecursive(TestCasesTree, selectedItem);

if (tvi != null)
{
tvi.IsSelected = true;
tvi.BringIntoView();
}
}

public static TreeViewItem FindTviFromObjectRecursive(ItemsControl ic, object o)
{
if (ic == null)
return null;

TreeViewItem result = null;

foreach (object item in ic.Items)
{
TreeViewItem tvi = ic.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;

if (tvi != null)
{
tvi.IsExpanded = true;
tvi.UpdateLayout();

if (item.Equals(o))
{
result = tvi;
}

TreeViewItem childResult = FindTviFromObjectRecursive(tvi, o);
if (childResult != null)
{
result = childResult;
}
}
}

return result;
}

Почему TreeView не может полностью развернуться и выбрать узел с первой попытки? Как я могу изменить код, чтобы гарантировать, что TreeView работает должным образом, не требуя ручного вмешательства?
Будем очень благодарны за любую помощь или подсказки! Спасибо.
Изменить (обновить):
Я считаю, что проблема не в моем предыдущем коде, а в том, как я обрабатываю передачу идентификатора TestCase. . У меня есть MainWindow, где пользователи могут открыть UserControl с именем «Поиск». Когда окно «Поиск» открыто, оно появляется поверх основного окна. В этом окне «Поиск» пользователь выбирает идентификатор TestCase и нажимает «Поиск».
Я подозреваю, что проблема кроется здесь: идентификатор TestCase пересылается в MainWindow до того, как будет создан UserControl. полностью закрыт, в результате чего пользовательский интерфейс Treeview не обновляется после первого элемента. Похоже, это влияет на выполнение функции FindTviFromObjectRecursive(TestCasesTree, selectedItem), которая возвращает значение Null после раскрытия только первого элемента (элемента, который присутствовал при открытии окна поиска).
Вот соответствующая часть моего UserControl MainWindowViewModel.cs:

Код: Выделить всё

public TestCaseNode SelectedTreeViewItem
{
...

set
{
...
((MainWindow))Application.Current.MainWindow).SelectTreeViewItem(value);

}

}

public void HighlightAndSelectTestCase(TestCaseNode testCase)
{
...

SelectedTreeViewItem = testCase;

}
Вот соответствующая часть моего UserControl SearchwindowVM.cs:

Код: Выделить всё

public SearchWindowVM(MainWindowViewModel mainWindowViewModel)
{
// Code initialization...
NotifyMainWindow = (testCase) =>
{
_mainWindowViewModel.HighlightAndSelectTestCase(testCase);
};
}

public void CloseClick()
{
if (SelectedTestCase != null)
{
DialogHost.CloseDialogCommand.Execute(null, null);
NotifyMainWindow?.Invoke(SelectedTestCase);
}
}

К сожалению, я немного запутался.

Подробнее здесь: https://stackoverflow.com/questions/793 ... elect-item
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • TreeView не полностью расширяется и не выбирает элемент
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • TreeView не полностью расширяется и не выбирает элемент
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Python Tkinter Treeview: размер столбца не расширяется до высоты окна
    Anonymous » » в форуме Python
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • SASS выбирает элемент только в том случае, если родственный элемент не существует
    Гость » » в форуме CSS
    0 Ответы
    41 Просмотры
    Последнее сообщение Гость
  • Как я могу создать плавающий элемент div, который расширяется к краям? [закрыто]
    Anonymous » » в форуме CSS
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»