2014-01-20 4 views
1

У меня есть DataGrid определяется следующим образом:Скрыть 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

Вы можете обработать 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; 
} 

UPDATE >>>

Вы можете использовать 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; 
    } 
} 
+0

Брус проверить имя столбца в моем XAML вместо этого. – Surjeet

+0

Вы можете прокручивать коллекцию «Столбцы», пока не найдете ее с заголовком «Заголовок», «текст заголовка столбца», а затем используйте это. Однако в вашей колонке нет установленного в данный момент заголовка. Вы * можете * также установить имя столбца (в XAML), а затем проверить это значение «Имя» вместо использования свойства «Заголовок». – Sheridan

+0

Не нужно перебирать все столбцы, у вас есть все, что вам нужно в аргументах события: if (e.PropertyName == "IsBKM") e.Column.Visibility = Visibility.Collapsed. – Dtex

Смежные вопросы