A bit late for a party on this, but I came across a similar scenario where I needed a Grid to sit below the DataGrid and share the same columns. You can implement something similar to diggy's answer using only XAML:
<DataGrid x:Name="dgOne"> <DataGrid.Columns> <DataGridTextColumn Header="One" /> <DataGridTextColumn Header="Two" /> <DataGridTextColumn Header="Three" /> <DataGridTextColumn Header="Four" /> </DataGrid.Columns> </DataGrid> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="{Binding Columns[0].ActualWidth, ElementName=dgOne}" /> <ColumnDefinition Width="{Binding Columns[1].ActualWidth, ElementName=dgOne}" /> <ColumnDefinition Width="{Binding Columns[2].ActualWidth, ElementName=dgOne}" /> <ColumnDefinition Width="{Binding Columns[3].ActualWidth, ElementName=dgOne}" /> </Grid.ColumnDefinitions> ... </Grid>
There is no reason you could not do the same with two DataGrids.
<DataGrid x:Name="dgOne"> <DataGrid.Columns> <DataGridTextColumn Header="One" /> <DataGridTextColumn Header="Two" /> <DataGridTextColumn Header="Three" /> <DataGridTextColumn Header="Four" /> </DataGrid.Columns> </DataGrid> <DataGrid> <DataGrid.Columns> <DataGridTextColumn Header="One" Width="{Binding Columns[0].ActualWidth, ElementName=dgOne}" /> <DataGridTextColumn Header="Two" Width="{Binding Columns[0].ActualWidth, ElementName=dgOne}" /> <DataGridTextColumn Header="Three" Width="{Binding Columns[0].ActualWidth, ElementName=dgOne}" /> <DataGridTextColumn Header="Four" Width="{Binding Columns[0].ActualWidth, ElementName=dgOne}" /> </DataGrid.Columns> </DataGrid>
source share