Как динамически генерировать столбцы в 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.