Невозможно найти контейнер из элемента в Treeview - PullRequest
0 голосов
/ 29 ноября 2011

Я получил ItemsControl (Treeview или TreevieItem), который Item заполнен моей собственной моделью.

Я не хочу программно развернуть TreeView.Поэтому я пробую это:

var model = itemsControl_.Items.Select(i => i as MyModel).Where(ftn => ftn != null && ftn.key = searchedKey));

Теперь, когда я основал модель, которую хочу развернуть.Я ищу контейнер, чтобы развернуть его:

var tvi = itemsControl_.ItemContainerGenerator.ContainerFromItem(model) as TreeViewItem;
 if(tvi!=null)
 {
  if (!tvi.IsExpanded)
  {
   tvi.IsExpanded = true;
  }     
 }

А иногда tvi равен нулю!?!

Может кто-нибудь объяснить мне, как это возможно?

1 Ответ

0 голосов
/ 30 ноября 2011

Судя по вашему описанию, вы хотите расширить TreeViewItem. Я думаю, что это, скорее всего, вызвано виртуализацией. Свойство Virtualizating Attached по умолчанию включено для TreeView, что означает, что если элемент отсутствует в области просмотра, он, вероятно, не получил контейнер. Если вы вызываете GetContainerFromItem для TreeView, ItemContainerGenerator ищет только прямые дочерние объекты TreeView. Таким образом, вам нужно рекурсивно пройти через TreeView и дочерние объекты TreeViewItem. Еще одним осложнением является то, что если TreeView виртуализирует свои элементы (вы включаете виртуализацию, устанавливая для свойства VirtualizingStackPanel.IsVirtualizing значение true), дочерние элементы необходимо создать, прежде чем вы сможете проверить его объект данных.

Надеюсь, это поможет.

Пожалуйста, обратитесь к http://blogs.msdn.com/b/wpfsdk/archive/2010/02/23/finding-an-object-treeviewitem.aspx

С уважением Дипак

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...