Reputation: 297
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
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