You can keep AutoGenerateColumns set to true and add an eventhandler to deal with any periods (or other special characters):
<DataGrid
Name="r2"
ItemsSource="{Binding Path=.}"
AutoGeneratingColumn="r2_AutoGeneratingColumn">
</DataGrid>
Codebehind:
private void r2_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyName.Contains('.') && e.Column is DataGridBoundColumn)
{
DataGridBoundColumn dataGridBoundColumn = e.Column as DataGridBoundColumn;
dataGridBoundColumn.Binding = new Binding("[" + e.PropertyName + "]");
}
}
This worked better for me in a MVVM scenario.