2010-05-20 9 views
21

Divertente, come a volte le cose semplici mi mordono dietro.WPF: Collega DataGrid a Elenco <String>

posso associare un DataGrid piacevolmente ad una collezione di qualche classe arbitraria, utilizzando un DataGridTextColumn come questo:

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

Ora voglio associare un DataGrid a una semplice raccolta di stringa. Quindi poiché non v'è alcuna proprietà "Nome" o qualcosa di simile per l'associazione a, come faccio a scrivere il legame:

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

String non ha proprietà "Valore" o qualcosa di simile. E se scrivo {Binding} finirò con un binding unidirezionale, incapace di scrivere modifiche alla Collection.

Pensandoci, penso che non sia possibile associare a una raccolta, quindi ho bisogno di avvolgere la mia stringa in una classe?
O c'è un modo?

risposta

30

È possibile farlo girare con il seguente Legatura:

Binding="{Binding Path=.} 

Ma non ci vorrà risolvere il problema, perché le stringhe sono di riferimento digitati che sono immutabili, significa che non è possibile modificare il riferimento di stringa che avete legato al tuo utente interfaccia.

Quindi i tuoi pensieri sono corretti, dovrai avvolgere queste stringhe in oggetti, usare la proprietà path di Binding e alimentare questi oggetti al tuo DataGrid.

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

Ma perché l'involucro funziona? Siamo ancora vincolati a una stringa, giusto? –

+0

No ... Stai vincolando a un oggetto che contiene una stringa. Questa è la differenza – Arcturus

+2

Capisco ora. Il binding non può cambiare il riferimento associato. Può solo cambiare proprietà. Ha senso ora. Grazie mille. –