2010-05-20 6 views
21

Drôle, comment parfois les choses simples me mordent derrière.WPF: Lier DataGrid à la liste <String>

je peux lier un DataGrid bien à une collection d'une classe arbitraire, en utilisant un DataGridTextColumn comme ceci:

// bound to List<Class> 
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 

Maintenant, je veux lier un DataGrid à une simple collection de cordes. Donc, puisqu'il n'y a pas de propriété « Name » ou quelque chose comme ça pour se lier à, comment puis-je écrire la liaison:

// bound to List<String> 
<DataGridTextColumn Header="Name" Binding="{Binding ???}"/> 

chaîne n'a pas de propriété « Value » ou quelque chose comme ça. Et si j'écris simplement {Binding}, je finirai par une liaison à sens unique, incapable d'écrire des modifications dans la collection.

En pensant à cela, je pense qu'il n'est pas possible de lier à une collection, donc j'ai besoin d'envelopper ma chaîne dans une classe?
Ou y a-t-il un moyen?

Répondre

30

Vous pouvez le faire fonctionner avec les éléments suivants Reliure:

Binding="{Binding Path=.} 

Mais il résoudre wont votre problème, parce que les chaînes sont référence typés qui sont immuables, ce qui signifie que vous ne pouvez pas changer la référence de chaîne que vous avez lié à votre utilisateur interface. Donc, vos pensées sont correctes, vous devrez envelopper ces chaînes dans les objets, utiliser la propriété path de Binding et alimenter ces objets à votre DataGrid.

public class StringWrapper 
{ 
    public string Value { get; set; } 
} 
+0

Mais pourquoi l'emballage fonctionne-t-il? Nous lions toujours une chaîne à droite? –

+0

Non .. Vous liez un objet contenant une chaîne. C'est la différence – Arcturus

+2

je comprends maintenant. La liaison ne peut pas modifier la référence liée. Il ne peut que changer de propriétés. Cela a du sens maintenant. Merci beaucoup. –

Questions connexes