我的DataGrid
定义如下:
<DataGrid Name="dtMydatagrid" Margin="10,10,10,10" RowHeight="20" AutoGenerateColumns="True" ItemsSource="{Binding}" Height="auto" Width="auto">
<DataGrid.Columns>
<DataGridTemplateColumn Header="">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="TXT" Background="Transparent" Width="15" IsReadOnly="True" Visibility="Hidden" Margin="0,0,0,0"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsBKM}" Value="true">
<Setter Property="Background" Value="AQUA" TargetName="TXT"/>
<Setter Property="Visibility" Value="Visible" TargetName="TXT"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
现在,我的类中有一个名为IsBKM
的布尔属性,DataGridTemplateColumn
是有界限的。
因此,它显示为CheckBox
。
我不想在IsBKM
中显示DataGrid
列。我可以使用触发器隐藏名称为IsBKM
或 任何其他解决方案 的列吗?
提前致谢。
答案 0 :(得分:1)
您可以处理DataGrid.AutoGeneratedColumns
Event并从那里设置列的Visibility
属性。你应该可以这样做:
private void DataGridAutoGeneratingColumn(object sender,
DataGridAutoGeneratingColumnEventArgs e)
{
DataGrid dataGrid = sender as DataGrid;
if (dataGrid != null && IsBKM) dataGrid.Columns[0].Visible = false;
}
更新&gt;&gt;&gt;
您可以使用e.Column.Header
属性检查列的名称,然后使用它。但是,您的列目前尚未设置Header
。您可以也设置列名(在XAML中),然后检查该Name
值,而不是使用Header
属性:
private void DataGridAutoGeneratingColumn(object sender,
DataGridAutoGeneratingColumnEventArgs e)
{
if (e.Column.Name == "IsBKM" && IsBKM)
{
e.Column.Visibility = Visibility.Collapsed;
}
}