Я нашел много кода на этом сайте и других, которые показывают, как создать вложенную сетку данных в XAML, но я не могу найти какую-либо информацию о том, как использовать код C # для получения тех же результатов.То, что я хотел бы сделать, это преобразовать это:
<DataGrid ...>
<DataGrid.Columns>
<DataGridTextColumn Header="Received Date" Binding="{Binding Received}" .../>
...
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding Details}" ...>
<DataGrid.Columns>
<DataGridTextColumn Header="Log Date" Binding="{Binding LogDate}" />
...
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid>
в C # код.
Структура данных выглядит примерно так:
public class MessageData {
Guid MessageId {get; set;}
DateTime ReceivedDate { get; set; }
...
List<EventDetail> Details { get; set; }
}
public class EventDetail {
Guid MessageId { get; set; }
DateTime LogDate { get; set; }
string LogEvent { get; set; }
...
}
Кажется, что теперь я могу получить большую часть работы, кроме возможности определять столбцы во внутренней сетке данных - код работает, еслиЯ установил автогенерацию в true, но я не могу понять, как определить столбцы для внутренней сетки.
DataGrid dg = new DataGrid();
...
dg.IsReadOnly = true;
FrameworkElementFactory details = FrameworkElementFactory(typeof(DataGrid));
details.SetBinding(ItemsControl.ItemsSourceProperty, new Binding("Details"));
details.SetValue(DataGrid.AutoGenerateColumnsProperty, true);
DataTemplate dt = new DataTemplate(typeof(DataGrid));
dt.VisualTree = details;
dt.RowDetailsTemplate = dt;
dg.ItemsSource = myDataSouce;
это работает, но когда я устанавливаю AutoGenerateColumns в false - и пытаюсь определить столбцы, это терпит неудачу...