2010-05-20 14 views
21

Divertido, cómo a veces las cosas simples me muerden por detrás.WPF: Vincular DataGrid a la lista <String>

que se puede unir una cuadrícula de datos muy bien a una colección arbitraria de alguna clase, utilizando un DataGridTextColumn así:

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

Ahora quiero enlazar un DataGrid a una simple colección de cuerdas. Así que ya que no hay ninguna propiedad "Nombre" o algo por el estilo para unirse a, ¿Cómo se escribe la unión:

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

La cadena no tiene la propiedad "Valor" o algo por el estilo. Y si escribo {Binding} terminaré con un enlace unidireccional, sin poder escribir cambios en la Colección.

Pensando en ello, creo que no es posible enlazar a una colección, ¿así que tengo que envolver mi cadena en una clase?
¿O hay alguna manera?

Respuesta

30

Puede hacer que se ejecute con la siguiente Encuadernación:

Binding="{Binding Path=.} 

Pero no lo puedo resolver su problema, porque las cadenas se escriben de referencia que son inmutables, lo que significa que no se puede cambiar la cadena de referencia que ha obligado a su usuario interfaz.

Así que sus pensamientos son correctos, deberá envolver estas cadenas en objetos, usar la propiedad de ruta de Enlace y alimentar estos objetos a su DataGrid.

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

¿Pero por qué está funcionando la envoltura? Todavía estamos vinculados a una cadena, ¿verdad? –

+0

No .. Estás vinculando a un objeto que contiene una cadena. Esa es la diferencia – Arcturus

+2

Entiendo ahora. La vinculación no puede cambiar la referencia enlazada. Solo puede cambiar las propiedades. Tiene sentido ahora. Muchas gracias. –