Silverlight 3 - Найти элемент внутри элемента управления - PullRequest
2 голосов
/ 05 апреля 2010

У меня есть ItemsControl, который связан с коллекцией объектов. Каждый объект имеет свою коллекцию, а также другие жизненно важные свойства. Чтобы отобразить объекты внутри объекта, я отображаю TreeView внутри ItemsControl. Я знаю, это звучит безумно Но это всего лишь урезанная версия того, что я пытаюсь сделать, чтобы вопрос был сосредоточен на проблеме. Вот мой образец:

<ItemsControl x:Name="myItemsControl">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <controls:TreeView x:Name="myTreeView">
      </controls:TreeView>
    </DataTemplate>                                     
  </ItemsControl.ItemTemplate>                                        
</ItemsControl>

Когда пользователь нажимает кнопку, мне нужно получить текущий TreeView, связанный с конкретным объектом. В попытке сделать это, я пытаюсь сделать следующее:

MyClass instanceToFind = (MyClass)(IdentifyDesiredInstance());                
foreach (MyClass instance in myItemsControl.Items)
{
  if (instance.ID == instanceToFind.ID)
  {
     TreeView treeView = null; // How do I get the TreeView?

     // Do other necessary updates  
  }
}

Приведенный выше фрагмент кода показывает, где я пытаюсь получить TreeView. Как получить TreeView при циклическом просмотре элементов в элементе управления?

Спасибо!

1 Ответ

3 голосов
/ 05 апреля 2010

Вам нужно использовать методы VisualTreeHelper.GetChild и VisualTreeHelper.GetChildrenCount для перебора дочерних элементов представления, пока не найдете дерево, соответствующее вашему элементу. Вы должны иметь возможность сравнить свойство TreeView.DataContext с вашим товаром, чтобы убедиться в его правильности. Обратите внимание, что вам нужно использовать это рекурсивно, так как GetChild извлекает только непосредственных потомков.

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

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