Jak dynamicznie generować kolumny w WPF DataGrid?

Próbuję wyświetlić wyniki zapytania w datagrid WPF. Typ ItemsSource, do którego jestem związany, jestIEnumerable<dynamic>. Ponieważ zwracane pola nie są określane do czasu wykonania, nie znam typu danych, dopóki zapytanie nie zostanie ocenione. Każdy „wiersz” jest zwracany jakoExpandoObject z właściwościami dynamicznymi reprezentującymi pola.

Miałem taką nadziejęAutoGenerateColumns (jak poniżej) będzie w stanie wygenerować kolumny zExpandoObject tak jak w przypadku typu statycznego, ale nie wydaje się.

<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Results}"/>

Czy mimo to należy to zrobić deklaratywnie, czy też muszę wciągnąć imperatywnie niektóre C #?

EDYTOWAĆ

Ok, otrzymasz prawidłowe kolumny:

// 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 });

Wystarczy teraz dowiedzieć się, jak powiązać kolumny z wartościami IDictionary.

questionAnswers(4)

yourAnswerToTheQuestion