2009-10-12 6 views
0

J'ai un ListBox avec un DataTemplate qui ressemble à ceci:Accès enfant de ListBoxItem

<ListBox Name="listBox"> 
     <ListBox.ItemTemplate> 
      <DataTemplate DataType="x:Type local:NumericIconDefinition"> 
       <Grid> 
        <ComboBox Name="IconComboBox"/> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Je voudrais récupérer l'instance ComboBox in order to manipulate it dans le code derrière. J'ai trouvé un billet de blog qui a expliqué le processus de récupération de la ListBoxItem:

ListBoxItem lbi = (ListBoxItem)listBox.ItemContainerGenerator.ContainerFromIndex(IndexInListBox); 

Mais je ne peux pas trouver un bon moyen d'accéder à la grille et les instances de ComboBox dans cet article. Idéalement, la construction sur le code ci-dessus, je voudrais faire quelque chose comme ceci:

ComboBox cb = (ComboBox)lbi.GetChildByName("IconComboBox"); 

Répondre

1

Vous pouvez y accéder si la méthode FindName du modèle:

ComboBox cb = (ComboBox)listBox.ItemTemplate.FindName("IconComboBox", lbi); 

Notez que vous ne pouvez le faire après que le ListBoxItem soit entièrement chargé, sinon le modèle ne sera pas encore instancié

+0

Je reçois l'erreur "Cette opération est valide uniquement sur les éléments qui ont ce modèle appliqué.", les deux lbi.IsInitialized et lbi.isLoaded rapports true. Le message d'erreur provoqué par le problème d'instanciation de modèle dont vous m'avez averti? Comment puis-je m'assurer qu'il est chargé? – Mizipzor

+0

OK, en réalité ce n'est pas le ListBoxItem que vous devez transmettre à la méthode FindName, mais le ContentPresenter qui présente les données. Vous pouvez trouver un exemple sur la page MSDN de la méthode FindName: http://msdn.microsoft.com/en-us/library/system.windows.frameworktemplate.findname.aspx –

+1

Oui, je l'ai trouvé lors de la recherche de certains plus d'infos pendant l'après-midi. J'ai un petit extrait de code au travail que je prévois d'afficher ici demain. À tout le moins de garder la question comme une référence personnelle. – Mizipzor

Questions connexes