2010-04-05 6 views
2

J'ai un ItemsControl qui est lié à une collection d'objets. Chaque objet a sa propre collection ainsi que d'autres propriétés vitales. Pour afficher les objets dans un objet, j'affiche un TreeView à l'intérieur d'un ItemsControl. Je sais que ça a l'air fou. Mais, c'est juste une version réduite de ce que j'essaye d'accomplir pour garder la question centrée sur le problème. Voici mon exemple:Silverlight 3 - Rechercher un élément dans le contrôle des éléments

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

Lorsqu'un utilisateur clique sur un bouton, je dois récupérer le TreeView courant associé à un objet spécifique. Pour tenter de le faire, je suis en train de ce qui suit:

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 
    } 
} 

L'extrait de code ci-dessus montre où je suis en train d'obtenir le TreeView. Comment puis-je obtenir le TreeView lors de la boucle à travers les éléments dans un itemscontrol?

Merci!

Répondre

3

Vous devez utiliser les méthodes VisualTreeHelper.GetChild et VisualTreeHelper.GetChildrenCount pour parcourir les enfants de la vue jusqu'à ce que vous trouviez l'arborescence correspondant à votre élément. Vous devriez être en mesure de vérifier la propriété TreeView.DataContext par rapport à votre article pour vérifier qu'il est le bon. Notez que vous devez l'utiliser de manière récursive car GetChild récupère uniquement les enfants immédiats. Comme vous auriez quand même besoin d'itérer l'arborescence visuelle, je vous recommande d'abandonner votre boucle actuelle et de ne faire que boucler les enfants en vérifiant l'ID de leurs contextes de données.

Questions connexes