2010-12-09 28 views
2

J'ai un ItemsControl dont ItemsSource est lié à une liste d'ID ints. Un convertisseur utilise les ID pour rechercher le nom qui doit être affiché pour l'utilisateur. Comment puis-je faire cela en XAML? Voici ce que j'ai jusqu'à présent, mais il ne fonctionne pas:Silverlight: Comment utiliser un convertisseur avec un ItemsControl?

<ItemsControl ItemsSource="{Binding Topics}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding FallbackValue='topic name', Converter={StaticResource topicToStrConverter}}" Margin="0,10,0,0"/> 
        <Button> 
         <Image Source="/PlumPudding;component/Images/appbar.cancel.rest.png" /> 
        </Button> 
       </StackPanel> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

Vraiment, ce que je veux comme argument au convertisseur est l'élément entier qui est affiché dans le modèle - pas une propriété de cette article. Quelle est la syntaxe pour cela?

J'utilise Silverlight 4.

Répondre

0

si Topics est List, alors ce que vous avez est correct. Cependant, si Topics est List et Id est une propriété de la classe Topic, vous devrez utiliser "Path = Id". Donc: {Reliure FallbakcValue = 'Bla', Path = Id, Converter = {StaticResource yourConverter}

Pour vous répondre à la deuxième question: « ce que je veux comme un argument au convertisseur est l'ensemble de l'élément qui est en cours d'affichage dans le modèle - pas une propriété de cet article "

Cette syntaxe que vous utilisez passera l'objet entier dans la liste, donc dans votre cas un int est passé au convertisseur. Encore une fois, s'il s'agit d'une liste, l'objet Topic est transmis au convertisseur.

0

Votre code est juste à mon avis ..

Il semble que problème dans 'convertisseur'. Essayez de déboguer le code de topicToStrConverter.

0

Vous devez définir DataContext pour le contrôle des éléments ou pour l'un de ses parents. Si vous ne le faites pas, il n'y a pas de contexte pour la liaison.