Wie generiere ich dynamisch Spalten in einem WPF-DataGrid?
Ich versuche, die Ergebnisse einer Abfrage in einem WPF-Datagrid anzuzeigen. Der ItemsSource-Typ, an den ich gebunden bin, istIEnumerable<dynamic>
. Da die zurückgegebenen Felder erst zur Laufzeit ermittelt werden, kenne ich den Datentyp erst, wenn die Abfrage ausgewertet wird. Jede "Zeile" wird als zurückgegebenExpandoObject
mit dynamischen Eigenschaften, die die Felder darstellen.
Das war meine HoffnungAutoGenerateColumns
(wie unten) wäre in der Lage, Spalten aus einem zu generierenExpandoObject
wie es mit einem statischen Typ tut, aber es scheint nicht zu.
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Results}"/>
Gibt es sowieso, um dies deklarativ zu tun, oder muss ich mich zwingend mit einem C # verbinden?
BEARBEITEN
Ok, das bringt mir die richtigen Spalten:
// 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 });
Nun muss nur noch herausgefunden werden, wie die Spalten an die IDictionary-Werte gebunden werden.