Символ полной остановки в именах столбцов второй таблицы неправильно интерпретируется синтаксическим анализатором пути привязки. Посмотрите выходные данные отладки во время работы этого примера, и вы увидите, что автоматически сгенерированные столбцы были связаны с «a» и «b», а не с «a.name» и «b.name»
System.Windows.Data Error: 40 : BindingExpression path error: 'a' property not found on 'object' ''DataRowView' ... etc.
System.Windows.Data Error: 40 : BindingExpression path error: 'b' property not found on 'object' ''DataRowView' ... etc.
Существует несколько различных символов, которые имеют особое значение в пути привязки, включая точку ('.'), Косую черту ('/'), квадратные скобки ('[', ']') и скобки ('( ',') '), скобки приведут к сбою приложения. Эти специальные символы можно экранировать, окружив путь привязки квадратными скобками. Дополнительную информацию о путях и экранировании символов можно найти в Обзор объявлений привязки
Чтобы это исправить, вам нужно установить AutoGenerateColumns = "False" и указать привязки столбцов в xaml:
<DataGrid
x:Name="r2"
ItemsSource="{Binding .}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="a.name" Binding="{Binding Path=[a.name]}" />
<DataGridTextColumn Header="b.name" Binding="{Binding Path=[b.name]}" />
</DataGrid.Columns>
</DataGrid>
или программно в коде
r2.AutoGenerateColumns = false;
foreach( DataColumn column in dt2.Columns )
{
var gridColumn = new DataGridTextColumn()
{
Header = column.ColumnName,
Binding = new Binding( "[" + column.ColumnName + "]" )
};
r2.Columns.Add( gridColumn );
}
r2.DataContext = dt2;