2

J'ai un <ItemsControl> avec un <DataTemplate> personnalisé (et aussi un <ItemsPanelTemplate> personnalisé qui est juste un WrapPanel), lié par ItemsSource à une collection observable simple de chaînes.Comment puis-je obtenir l'instance d'un élément basé sur un modèle à partir d'ItemsControl de base de données? (WPF)

Le DataTemplate consiste simplement en une instance d'un UserControl personnalisé dont les propriétés sont liées à la chaîne via {Binding}. Le problème est que mes éléments de données ne sont que des chaînes, j'ai besoin d'accéder directement aux instances de mon UserControl par programmation, mais je n'arrive pas à comprendre comment!

J'ai essayé:

var item = tagBar.Items[ tagBar.Items.Count - 1 ]; 

... mais renvoie simplement la chaîne. Aussi:

var item2 = tagBar.ItemContainerGenerator.ContainerFromIndex(tagBar.Items.Count - 1); 

... retourne un ContentPresenter, et je ne peux pas comprendre ce qu'il faut faire avec le ContentPresenter pour se rendre à l'instance de mon UserControl.

??

Ceci est similaire à this question, mais il n'a jamais été correctement répondu, et était également spécifique à Silverlight alors que c'est WPF.

+0

Avant que quelqu'un ne le suggère, item2.Content renvoie juste la chaîne aussi. * soupir * – devios1

Répondre

2

La réponse que j'ai posté over here traite de la focalisation d'un élément dans un DataTemplate, mais elle doit fournir le code dont vous avez besoin. Cela implique l'utilisation de la méthode FindName sur votre DataTemplate pour trouver un contrôle à l'intérieur. Si vous donnez un nom à votre UserControl, vous devriez avoir raison.

+0

Excellent, ça l'a fait! La clé transmettait 'item' (ou plutôt' item2' dans mon code ci-dessus) en retour dans 'tagBar.ItemTemplate.FindName()' (et bien sûr, en donnant à 'UserControl' un nom à trouver par). Je vais également faire attention avec le bit IsLoaded, bien que ce soit un peu boiteux que cela soit nécessaire. Merci! – devios1

+0

Apparemment, les guillemets ne fonctionnent pas dans les commentaires. : P – devios1

+0

@ chaiguy1337 - il semble que la prise en charge du backtick ait été ajoutée depuis que vous l'avez écrite, car le texte est maintenant formaté. –