根据其属性名称隐藏Datagrid列

时间:2014-01-20 10:42:03

标签: wpf datagrid wpfdatagrid

我的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 任何其他解决方案 的列吗?

提前致谢。

1 个答案:

答案 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;
    }
}