Как динамически генерировать столбцы в WPF DataGrid?

Я пытаюсь отобразить результаты запроса в таблице данных WPF. Тип ItemsSource, с которым я связанIEnumerable<dynamic>, Поскольку возвращаемые поля не определены до времени выполнения, я не знаю тип данных, пока запрос не будет оценен. Каждый «ряд» возвращается какExpandoObject с динамическими свойствами, представляющими поля.

Я надеялся, чтоAutoGenerateColumns (как показано ниже) сможет генерировать столбцы изExpandoObject как это происходит со статическим типом, но это не похоже на.

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

Есть ли какой-либо способ сделать это декларативно, или я должен обязательно подключиться с некоторым C #?

РЕДАКТИРОВАТЬ

Хорошо, это даст мне правильные столбцы:

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

Так что теперь просто нужно выяснить, как связать столбцы со значениями IDictionary.

Ответы на вопрос(4)

Ваш ответ на вопрос