Como faço para gerar dinamicamente colunas em um DataGrid do WPF?

Eu estou tentando exibir os resultados de uma consulta em um datagrid do WPF. O tipo ItemsSource ao qual estou ligando éIEnumerable<dynamic>. Como os campos retornados não são determinados até o tempo de execução, não sei o tipo de dados até que a consulta seja avaliada. Cada "linha" é retornada como umExpandoObject com propriedades dinâmicas que representam os campos.

Foi minha esperança queAutoGenerateColumns (como abaixo) seria capaz de gerar colunas de umExpandoObject como acontece com um tipo estático, mas não parece.

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

Existe alguma maneira de fazer isso declarativamente ou eu tenho que ligar imperativamente com algum c #?

EDITAR

Ok, isso me dará as colunas corretas:

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

Então, agora só precisa descobrir como vincular as colunas aos valores IDictionary.

questionAnswers(4)

yourAnswerToTheQuestion