Alfie
Alfie

Reputation: 297

How to have DataGrid Column Header Invisible if it Contains a Certain Value

I have a DataGrid, is there anyway I can make a DataGridColumnHeader invisible if it contains a certain value.

Here is my attempt:

<DataGrid Grid.Row="1" Grid.Column="1" Width="400" HorizontalAlignment="Center" Margin="20" ItemsSource="{Binding RunNumbers.RunNumbers}" >
    <DataGrid.ColumnHeaderStyle>
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="Visibility" Value="Visible" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Content.Text, Mode=OneWay, RelativeSource={RelativeSource Self}}" Value="rows">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.ColumnHeaderStyle>
<DataGrid />

Any help is greatly appreciated, thanks!

Upvotes: 0

Views: 124

Answers (1)

mm8
mm8

Reputation: 169150

If you set the AutoGenerateColumns property to false and define the columns that you want to display explicitly yourself, you can simply avoid setting the Header property of certain columns, e.g.:

<DataGrid Grid.Row="1" Grid.Column="1" Width="400" HorizontalAlignment="Center" Margin="20" 
          ItemsSource="{Binding RunNumbers.RunNumbers}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <!-- RunNumbers.Column1 has no header... -->
        <DataGridTextColumn Binding="{Binding Column1}" />
    </DataGrid.Columns>
</DataGrid>

Alternatively you could handle the AutoGeneratingColumn event in the view:

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyName == "rows")
        e.Column.Header = string.Empty;
}

XAML:

<DataGrid Grid.Row="1" Grid.Column="1" Width="400" HorizontalAlignment="Center" Margin="20" 
          ItemsSource="{Binding RunNumbers.RunNumbers}" AutoGeneratingColumn="DataGrid_AutoGeneratingColumn" />

Upvotes: 1

Related Questions