2010-05-20 9 views
21

Lustig, wie manchmal die einfachen Dinge mich in den Hintern beißen.WPF: Bind Datagrid zur Liste <String>

Ich kann ein Datagrid binden gut an eine Sammlung von einer beliebigen Klasse, ein Datagridtextcolumn wie folgt aus:

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

Jetzt möchte ich ein Datagrid auf eine einfache Sammlung von String binden. Also da gibt es keine Eigenschaft „Name“ oder so ähnlich ist, zu binden, wie schreibe ich die Bindung:

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

String hat keine Eigenschaft „Value“ oder so ähnlich. Und wenn ich nur {Binding} schreibe, werde ich mit einer unidirektionalen Bindung enden und kann die Änderungen nicht in die Sammlung zurückschreiben.

Denken Sie darüber nach, ich denke, es ist nicht möglich, zu einer Sammelstelle zu binden, so dass ich brauche, um meinen String in eine Klasse zu wickeln? Oder
ist es eine Möglichkeit?

Antwort

30

Sie können es mit der folgenden Bindung laufen lassen:

Binding="{Binding Path=.} 

Aber es wird nicht Ihr Problem lösen, weil Strings werden Referenz eingegeben, die unveränderlich sind, das heißt, Sie können nicht die Zeichenfolge Verweis ändern Sie Ihren Benutzer gebunden haben Schnittstelle.

So Ihre Gedanken richtig sind, müssen Sie diese Zeichenfolgen in Objekte wickeln, verwenden Sie den Pfad Eigenschaft der Bindung und füttern diese Objekte zu Ihrem Datagrid.

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

Aber warum funktioniert der Wrapper? Wir sind immer noch an eine Zeichenfolge gebunden, oder? –

+0

Nein. Sie binden an ein Objekt, das eine Zeichenfolge enthält. Das ist der Unterschied – Arcturus

+2

ich verstehe jetzt. Die Bindung kann den gebundenen Verweis nicht ändern. Es kann nur Eigenschaften ändern. Es macht jetzt Sinn. Vielen Dank. –