2009-09-08 10 views
11

Dans mon présentateur J'ai cette propriété:Comment lier une liste <string> à ItemsControl?

public List<string> PropertyNames { get; set; } 

Et je veux énumérer les noms avec un ItemsControl/DataTemplate comme ceci:

<ItemsControl ItemsSource="{Binding PropertyNames}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Value}"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Depuis la liste générique ne dispose pas de propriétés nommées , comment puis-je référencer la valeur dans ma déclaration de liaison?

Répondre

29

laissez-moi répondre, c'est juste {Binding}.

+0

+1. Ouais. Je l'ai confondu avec 'Path = ...' où le point fonctionne. –

+9

FYI, '.' fonctionne avec ou sans 'Path ='. Blank est implicitement interprété comme un '.'. Vous pouvez donc écrire {Binding}, {Binding.} Ou {Binding Path =.} Notez que {Binding Path =} ne fonctionnera pas - vous obtiendrez une erreur de compilation XAML. –

+2

haha. La question est posée à 11h15 et répondue exactement par la même personne juste une minute plus tard. Alors la réponse est acceptée :) bien fait. –

0

Un moyen plus facile d'accomplir la même chose est d'utiliser simplement:

<ItemsControl ItemsSource="{Binding PropertyNames}"/> 

Par défaut, cela va créer un StackPanel vertical et ajouter chaque élément dans son propre TextBlock. Selon MSDN, cela fonctionne pour l'un des suivants:

  • Une chaîne.
  • Un objet DateTime.
  • Un objet UIElement.
  • Un contrôle Panel qui contient une Ellipse et un TextBlock.
Questions connexes