2009-09-08 84 views
12

有誰知道是否有以某種方式隱藏GridViewColumn這樣一個選項:C#/ WPF:使GridViewColumn可見= false?

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

非常感謝!

編輯:爲清楚起見

不幸的是,沒有 「可見性」 屬性。我正在尋找一種方法來創建它。

編輯:基於反饋的解決方案是這樣的:

<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(); 
    } 
} 

感謝所有!
乾杯

回答

7

編輯:反映修改後的問題。

如何創建一個0寬度列?將一個布爾值寫入寬度IValueConverter,將ColumnIsVisible作爲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(); 
     } 
    } 

是這樣的:如果Thumb.DragDelta可以解決我用它在列表視圖作爲

<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; 
} 
} 
} 
+0

感謝您的快速響應。不幸的是,沒有「IsVisible」屬性..所以我正在尋找一種方法來創建它。 – 2009-09-08 09:07:52

+0

對您的編輯的評論:這將允許用戶調整列的大小,不幸的是沒有啓用屬性。 – 2009-09-08 09:36:25

+0

該死!我想:-) – 2009-09-08 09:46:44

-1

使用是基於設定另一種解決方案該列的寬度爲零。我修改了一下。現在是這樣的:

  1. 綁定頭的知名度視圖模型的布爾屬性,使用布爾到可視性轉換器
  2. 使用的標題中的附加屬性來設置列的寬度爲零

這是代碼。

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(); 
    } 
} 

附加的行爲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" 
} 
7

Here問題

<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

這個效果很好! – 2014-03-12 19:57:20

0

我已經設置列寬度= 「0」 到零。 現在該列看起來像不可見。但我不知道它是否會影響其他任何東西。 這可能是一個虛擬的解決方案,但現在它的工作。

+2

用戶仍然可以拖動列寬 – Paparazzi 2015-06-07 21:25:04