Редактировать: столбцы известны только во время выполнения, и я почему-то строю данные в DataTable на лету.Как связать с конкретными объектами в DataGrid/DataTable
У меня есть динамические данные, которые я должен показать в DataGrid. Каждая ячейка в datagrid будет привязана к сложному типу данных. Я успешно создаю DataTable и привязываюсь к нему. DataGrid правильно автогенерирует свои столбцы, но все данные являются строками.
В коде для (для временной отладки) Я обрабатываю событие AutoGeneratingColumn и пытаюсь установить динамический тип столбца. Если есть тип комплекса:
public class BoolData
{
public bool Value { get; set; }
public Guid Id{ get; set; }
}
В коде позади для вида, я делаю это:
private void DataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyType == typeof(string))
{
var col = new DataGridTextColumn {Binding = new Binding(e.PropertyName)};
e.Column = col;
e.Column.Header = e.PropertyName;
}
else if (e.PropertyType == typeof(BoolData))
{
var col = new DataGridCheckBoxColumn {Binding = new Binding(e.PropertyName + "." + "Value")};
e.Column = col;
e.Column.Header = e.PropertyName;
}
}
Проблема заключается в том, что даже там, где я добавил MyBool объекты в DataTable, строка " MyNamespace.MBoolData "- это то, что находится в DataGrid, что означает, что первое предложение if if является единственным. Это как если бы DataGrid или DataTable вызывали ToString() на объекте, прежде чем пытаться его отобразить.
Итак, я думаю, мой вопрос: как создать динамический DataTable, содержащий сложные объекты, а затем привязать его.
Столбцы известны только во время выполнения, и я почему-то строю данные в DataTable на лету. – RBT