Отключить и включить видимость столбца - PullRequest
1 голос
/ 04 июля 2010

У меня есть DataGrid со многими столбцами, и я хотел бы предоставить пользователям выпадающий список, который позволяет им выбирать, какие столбцы они могут видеть. Я использую .Net 4 WPF DataGrid в настольном приложении.

Кто-нибудь знает простой способ выполнить то, что я пытаюсь сделать?

1 Ответ

1 голос
/ 05 июля 2010

Я делаю это следующим образом.

Я получаю из сетки добавление ICommand с именем HideShowColumnCommand, которое принимает в качестве параметра DataGridColumn (тот, который я хочу скрыть или показать) и скрывает столбец, если онвидимый, и показывает его, если это не так.

Затем я использую хитрое контекстное меню, которое я прикрепляю к заголовку столбца, который имеет галочку, показывающую состояние столбца видимое / скрытое ..

Контекстное меню выглядит так

<ContextMenu
   ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Column.DataGridOwner.Columns}">
   <ContextMenu.Resources>
      <local:DataGridHeaderVisibilityToBooleanConverter
         x:Key="visibilityConverter" />
      <BooleanToVisibilityConverter
         x:Key="VisibilityOfBool" />

      <DataTemplate
         DataType="{x:Type DataGridColumn}">
         <ContentPresenter
            Content="{Binding Path=Header}"
            RecognizesAccessKey="True" />
      </DataTemplate>

   </ContextMenu.Resources>
   <ContextMenu.ItemContainerStyle>
      <Style
         TargetType="MenuItem">
         <!--Warning dont change the order of the following two setters
                   otherwise the command parameter gets set after the command fires,
                   not much use eh?-->
         <Setter
            Property="CommandParameter"
            Value="{Binding Path=.}" />
         <Setter
            Property="Command"
            Value="{Binding Path=DataGridOwner.HideShowColumnCommand}" />
         <Setter
            Property="IsChecked"
            Value="{Binding Path=Visibility, Converter={StaticResource visibilityConverter}}" />
      </Style>
   </ContextMenu.ItemContainerStyle>
</ContextMenu>  

Конвертер вот так

public class DataGridHeaderVisibilityToBooleanConverter :IValueConverter{
  #region IValueConverter Members

  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
     try {

        Visibility visibility = (Visibility)value;
        if (visibility == Visibility.Visible) {
           return true;
        }
        else {
           return false;
        }
     }
     catch { }
     return null;
  }

  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
     throw new NotImplementedException();
  }

  #endregion
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...