2011-09-01 84 views
4

我正在一个应用程序中使用同一组列和绑定来制作多个DataGrid。我希望做的是让所有的DataGrid都适当地响应一个DataGrid中的变化。如果我改变一列的大小,其他DG的相应列应该具有相同的宽度。这与S.O.的这个问题有些相似。 (WPF share column width between separate grids)除DataGrids外,不包括网格。我希望DataGrids具有类似于Grid中的IsSharedSize的属性,但似乎并不是这样。跨多个DataGrid的共享DataGridColumn宽度

有没有一个属性我可以访问,或一些替代方法,做我想要完成的?在任何人提出这一点之前,我不能将它们全部合并到一个DataGrid中,我试图说的是,由于应用程序本身的性质,我无法将所有信息放在一个DataGrid中。

回答

3

虽然开箱即用的DataGrid's不可能实现共享宽度,但我认为这是处理此类情况的最佳方法。

在源DataGrid列与目标DataGrid列宽之间创建绑定。就我而言,我有两个目标DataGrid's(dgTarget1和dgTarget2),所以这里是代码:

for (int index = 0; index < dgSource.Columns.Count; index++) 
{ 
    Binding bindingWidth = new Binding(); 
    bindingWidth.Mode = BindingMode.TwoWay; 
    bindingWidth.Source = dgSource.Columns[index]; 
    bindingWidth.Path = new PropertyPath(DataGridColumn.WidthProperty); 
    BindingOperations.SetBinding(dgTarget1.Columns[index], DataGridColumn.WidthProperty, bindingWidth); 
    BindingOperations.SetBinding(dgTarget2.Columns[index], DataGridColumn.WidthProperty, bindingWidth); 
} 
4

有点晚就这一个派对,但我碰到,我需要一个网格,类似的情景来了坐在DataGrid下面并共享相同的列跨度。您可以实现类似的东西来digitguy的回答只使用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> 

没有理由,你不能做同样的事情有两个DataGrid中。

<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>