¿Cómo genero dinámicamente columnas en un DataGrid de WPF?
Estoy intentando mostrar los resultados de una consulta en una red de datos de WPF. El tipo ItemsSource al que estoy vinculado esIEnumerable<dynamic>
. Como los campos devueltos no se determinan hasta el tiempo de ejecución, no sé el tipo de datos hasta que se evalúa la consulta. Cada "fila" se devuelve como unExpandoObject
con propiedades dinámicas que representan los campos.
Era mi esperanza queAutoGenerateColumns
(como abajo) sería capaz de generar columnas desde unExpandoObject
como lo hace con un tipo estático pero no parece.
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Results}"/>
¿Hay alguna forma de hacer esto de forma declarativa o tengo que conectarme imperativamente con algunos C #?
EDITAR
Ok esto me dará las columnas correctas:
// ExpandoObject implements IDictionary<string,object>
IEnumerable<IDictionary<string, object>> rows = dataGrid1.ItemsSource.OfType<IDictionary<string, object>>();
IEnumerable<string> columns = rows.SelectMany(d => d.Keys).Distinct(StringComparer.OrdinalIgnoreCase);
foreach (string s in columns)
dataGrid1.Columns.Add(new DataGridTextColumn { Header = s });
Así que ahora solo hay que averiguar cómo vincular las columnas a los valores de IDictionary.