2011-09-01 77 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>