Я хочу сделать имитацию Datagrid с многоуровневым (2 уровня) заголовком столбца.Я собираюсь определить первый уровень с помощью Grid поверх сетки данных, а вторым уровнем будет сам заголовок сетки данных, как показано ниже:

Проблема Iтеперь (что, вероятно, в valueconventer) заключается в том, что я хочу, чтобы ширина GridColumn1
всегда была суммой ширины 'DataGridColumn1
и DataGridColumn2
столбцов.Для этого я создал преобразователь значений:
public class DataGridExtraHeaderConventer : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
int actualWidth = 0;
foreach (var item in values)
{
actualWidth += System.Convert.ToInt32(item);
}
return actualWidth;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
var x = DependencyProperty.UnsetValue;
var y = DependencyProperty.UnsetValue;
return new object[] { x, y };
}
}
И определил GridColumn1
, как показано ниже:
<Grid.ColumnDefinitions>
<ColumnDefinition>
<ColumnDefinition.Width>
<MultiBinding Converter="{StaticResource DataGridExtraHeaderConventer }">
<Binding ElementName="Column1" Path="ActualWidth"/>
<Binding ElementName="Column2" Path="ActualWidth"/>
</MultiBinding>
</ColumnDefinition.Width>
</ColumnDefinition>
<ColumnDefinition Width="*" />
Datagrid
выглядит так:
<DataGrid Name="datagrid1" AutoGenerateColumns="False" Grid.Row="3" RowHeaderWidth="10">
<DataGrid.Columns>
<DataGridTextColumn x:Name="Column1" Binding="{Binding something}" Header="column 1" Width="50*" />
<DataGridTextColumn x:Name="Column2" Binding="{Binding something}" Header="column 2" Width="60*" />
<DataGridTextColumn x:Name="Column3" Binding="{Binding something}" Header="column 3" Width="80" />
<DataGridTextColumn x:Name="Column4" Binding="{Binding something}" Header="column 4" Width="*" />
</DataGrid.Columns>
</DataGrid>
Этот код по какой-то причине не работает.Я запустил его успешно, куплю ширину GridColumn, как это было без привязки.
PS Если я хочу привязать DataGridColumn1
ширину столбца к GridColumn1
, это работает:
<ColumnDefinition Width="{Binding ElementName=Column1, Path=ActualWidth}">