2009-09-08 7 views
12

Est-ce que quelqu'un sait s'il y a une option pour cacher une GridViewColumn en quelque sorte comme ceci:C#/WPF: Faire un GridViewColumn Visible = false?

<ListView.View> 
    <GridView> 
     <GridViewColumn Header="Test" IsVisible="{Binding Path=ColumnIsVisible}" /> 
    </GridView> 
<ListView.View> 

Merci beaucoup!

Edit: Pour plus de clarté

Malheureusement, il n'y a pas de propriété "IsVisible". Je cherche un moyen de créer cela.

Edit: La solution basée sur les évaluations ressemble à:

<GridViewColumn DisplayMemberBinding="{Binding Path=OptionColumn1Text}" 
       Width="{Binding Path=SelectedEntitiy.OptionColumn1Width}"> 
    <GridViewColumnHeader Content="{Binding Path=SelectedEntitiy.OptionColumn1Header}" IsEnabled="{Binding Path=SelectedEntitiy.OptionColumn1Width, Converter={StaticResource widthToBool}}" /> 
</GridViewColumn> 

public class WidthToBooleanConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return (int)value > 0; 
    } 

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

Merci à tous!
Salutations

Répondre

7

Éditer: Refléter la question modifiée.

Qu'en est-il de la création d'une colonne de largeur 0? Ecrire un Boolean à Width IValueConverter, qui prend un ColumnIsVisible comme ConverterParmeter?

public class BooleanToWidthConverter : IValueConverter { 
     public object Convert(object value, Type targetType, 
           object parameter, CultureInfo culture){ 
      return ((bool) parameter)? value : 0; 
     } 

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

Quelque chose comme:

<ListView .. > 
<ListView.Resources> 
    <BooleanToWidthConverter x:Key="boolToWidth" /> 
</ListView.Resources> 

<ListView.View> 
    <GridView> 
     <GridViewColumn 
        Header="Test" 
        Width= 
     "{Binding Path=ColumnWidth, 
       Converter={StaticResource boolToVis}, 
       ConverterParameter=ColumnIsVisible}" /> 
    </GridView> 
<ListView.View> 
+0

Merci pour la réponse rapide. Malheureusement, il n'y a pas de propriété "IsVisible" .. donc je cherche un moyen de créer cela. –

+0

Commentaire à votre édition: Cela permettrait à l'utilisateur de redimensionner la colonne, malheureusement il n'y a pas non plus de propriété Enabled. –

+0

Merde!J'essaye :-) –

-1

utilisation si Thumb.DragDelta peut résoudre le problème

Je l'utilise dans listview comme

<ListView x:Name="MyListView"IsSynchronizedWithCurrentItem="True" 
     ItemsSource="{Binding Path=Items}", Mode=Default, Source={StaticResource DataProvider}}" 
     Thumb.DragDelta="Thumb_DragDelta"> 


public Window1() 
{ 
InitializeComponent(); 
MyListView.AddHandler(Thumb.DragDeltaEvent, new DragDeltaEventHandler(Thumb_DragDelta), true); 

void Thumb_DragDelta(object sender, DragDeltaEventArgs e) 
{ 
Thumb senderAsThumb = e.OriginalSource as Thumb;  
GridViewColumnHeader header = senderAsThumb.TemplatedParent as GridViewColumnHeader;  
if (header.Column.ActualWidth < MIN_WIDTH) 
{ 
    header.Column.Width = MIN_WIDTH; 
} 
if (header.Column.ActualWidth > MAX_WIDTH)  
{  
    header.Column.Width = MAX_WIDTH; 
} 
} 
} 
7

Here est une autre solution basée sur la configuration la largeur de la colonne à zéro. Je l'ai modifié un peu. Il travaille maintenant comme ceci:

  1. Bind la visibilité à une propriété booléenne de l'en-tête de l'ViewModel, en utilisant un convertisseur bool à la visibilité
  2. Utilisez une propriété attachée sur l'en-tête pour définir la largeur de la colonne à zéro

Voici le code.

XAML:

<GridViewColumn 
    HeaderTemplate="..." 
    HeaderContainerStyle="..."> 
    <GridViewColumnHeader 
     Content="Header text" 
     Visibility="{Binding AppliesToColumnVisible, Converter={StaticResource BooleanToVisibilityConverter}}" 
     behaviors:GridViewBehaviors.CollapseableColumn="True" /> 

BooleanToVisibilityConverter:

public class BooleanToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     bool param = bool.Parse(value.ToString()); 
     if (param == true) 
      return Visibility.Visible; 
     else 
      return Visibility.Collapsed; 
    } 

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

comportement attaché GridViewBehaviors.CollapseableColumn:

public static readonly DependencyProperty CollapseableColumnProperty = 
    DependencyProperty.RegisterAttached("CollapseableColumn", typeof(bool), typeof(GridViewBehaviors), 
    new UIPropertyMetadata(false, OnCollapseableColumnChanged)); 

public static bool GetCollapseableColumn(DependencyObject d) 
{ 
    return (bool)d.GetValue(CollapseableColumnProperty); 
} 

public static void SetCollapseableColumn(DependencyObject d, bool value) 
{ 
    d.SetValue(CollapseableColumnProperty, value); 
} 

private static void OnCollapseableColumnChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) 
{ 
    GridViewColumnHeader header = sender as GridViewColumnHeader; 
    if (header == null) 
     return; 

    header.IsVisibleChanged += new DependencyPropertyChangedEventHandler(AdjustWidth); 
} 

static void AdjustWidth(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    GridViewColumnHeader header = sender as GridViewColumnHeader; 
    if (header == null) 
     return; 

    if (header.Visibility == Visibility.Collapsed) 
     header.Column.Width = 0; 
    else 
     header.Column.Width = double.NaN; // "Auto" 
} 
+0

cela fonctionne bien! –

0

Je me suis fixé la colonne la largeur = "0" à zéro. Maintenant, la colonne ne semble pas visible. Mais je ne sais pas si cela affectera quoi que ce soit d'autre. Ce pourrait être une solution fictive mais pour l'instant cela fonctionne.

+2

L'utilisateur peut toujours faire glisser la largeur de colonne – Paparazzi

Questions connexes