J'ai un simple produit de classe et un UserControl nommé ProductSummaryControl. ProductSummaryControl affiche les détails d'une classe de produit transmise à son DataContext. J'ai vérifié que cela fonctionne quand j'ai mis en place le contrôle et sa propriété manuellement.UserControl lié aux données dans ListBox.ItemTemplate
Je rencontre un problème lorsque j'essaie d'utiliser le ProductSummaryControl dans le cadre d'un ListBox ItemTemplate. Voici le code correspondant:
<ListBox x:Name="ProductsList" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<local:ProductSummaryControl DataContext="{Binding}" HorizontalAlignment="Stretch"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Je mis le ItemsSource ListBox à une liste et je vois plusieurs instances de ma ProductSummaryControl qui correspondent au nombre de produits dans la liste, mais les contrôles ne sont pas correctement lié aux données . Tous les exemples que j'ai trouvé de personnalisation ItemTemplate sur le web suggèrent que {} est Binding la façon correcte pour obtenir la valeur de l'article, mais je suis apparemment manque quelque chose ...
MISE À JOUR:
I J'ai fait un peu plus de recherche et j'ai découvert que le DataContext de ProductSummaryControl est défini sur une instance par défaut de Product(). Je pense que cela est à cause de cela:
<UserControl.Resources>
<DBSchmid_Data:Product x:Key="ProductDataSource" d:IsDataSource="True"/>
</UserControl.Resources>
<UserControl.DataContext>
<Binding Mode="OneWay" Source="{StaticResource ProductDataSource}"/>
</UserControl.DataContext>
Cela a été causé par la mise en place DataContext dans le mélange afin que les différents éléments du contrôle peuvent référencer des propriétés du DataContext hérité du UserControl. J'ai vérifié que je pouvais modifier la valeur de DataContext à partir d'une méthode de clic sur un bouton et que la liaison fonctionnait correctement, alors j'ai pensé que cela fonctionnerait également avec une liaison via un modèle. Apparemment, les deux cas sont traités différemment, mais je ne comprends toujours pas comment.
Cela fonctionne pour moi. Pourriez-vous décrire comment ça va mal? Voyez-vous des erreurs de liaison dans la fenêtre Sortie lorsque vous l'exécutez sous le débogueur? – itowlson