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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage