2010-09-30 5 views
0

J'essaie de lier une collection à un contrôle ListBox en utilisant uniquement XAML. Cela fonctionne, mais il affiche seulement MyProject.mainItem (qui est le type d'objet), au lieu des valeurs réelles.Problème avec une liaison simple

Dans la classe qui est affecté comme DataContext, j'ai ceci:

ItemCatalog.Add(new mainItem { Ref = "555555", ItemName = "First Item" }); 

Dans le XAML sur la page qui a le ListBox, je ceci:

<ListBox ItemsSource="{Binding ItemCatalog}"> 
     <DataTemplate> 
      <StackPanel Margin="0,0,0,17" Width="432"> 
        <TextBlock Text="{Binding Ref}" TextWrapping="Wrap" Foreground="Black" /> 
        <TextBlock Text="{Binding ItemName}" TextWrapping="Wrap" Margin="12,-6,12,0" Foreground="Black" /> 
      </StackPanel> 
     </DataTemplate> 
</ListBox> 

Il procède par itérations toute la collection ItemCatalog, mais au lieu d'afficher des valeurs telles que First Item, il affiche simplement le type de l'objet. merci

+0

Je n'ai jamais travaillé avec silverlight auparavant, mais existe-t-il une propriété DataSource ou quelque chose pour "TextBlock"? – EJC

Répondre

3

Si l'article principal n'a pas de représentation visuelle IE un modèle de données. Ensuite, il appelle le ToString() de cet objet pour son affichage. C'est pourquoi vous voyez le type d'objet. Pourquoi votre modèle de données ne fonctionne pas, c'est parce que vous avez essayé de l'insérer comme ListBoxItem.

Ce que vous voulez faire est de remplacer les ItemTemplate

<ListBox ItemsSource="{Binding ItemCatalog}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate/> 
    </ListBox.ItemTemplate> 
</ListBox> 

vous aurez également besoin de mettre votre DataType propriété dans le DataTemplate au type approprié.

Espérons que ça aide.

+0

Merci, c'était tout. J'ai oublié d'ajouter la balise 'ItemTemplate'. – XSL

0

Le code dit que le DataTemplate est l'un des éléments de la ListBox.

Essayez d'ajouter une balise <ListBox.ItemsTemplate> autour du <DataTemplate>.