2009-09-08 29 views
12

Có ai biết nếu có một tùy chọn để ẩn một GridViewColumn bằng cách nào đó như thế này:C#/WPF: Tạo một GridViewColumn Visible = false?

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

Cảm ơn rất nhiều!

Chỉnh sửa: Để làm rõ

Thật không may, không có "IsVisible" tài sản. Tôi đang tìm cách tạo ra điều đó.

Edit: Các giải pháp dựa trên những phản hồi trông giống như:

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

Nhờ tất cả!
Chúc mừng

Trả lời

7

Chỉnh sửa: Phản ánh câu hỏi đã sửa đổi.

Điều gì về việc tạo cột có chiều rộng 0? Viết một Boolean để chiều rộng IValueConverter, mà có một ColumnIsVisible như 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(); 
     } 
    } 

Cái gì như:

<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

Cảm ơn bạn đã phản hồi nhanh. Thật không may, không có "IsVisible" tài sản .. vì vậy tôi đang tìm kiếm một cách để tạo ra điều đó. –

+0

Nhận xét chỉnh sửa của bạn: Điều đó sẽ cho phép người dùng thay đổi kích thước cột, tiếc là không có Tài sản được bật. –

+0

Chết tiệt!Tôi đang cố gắng :-) –

-1

Sử dụng nếu Thumb.DragDelta có thể giải quyết vấn đề

tôi sử dụng nó trong listview như

<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 là một giải pháp dựa trên thiết chiều rộng của cột là 0. Tôi đã sửa đổi nó một chút. Nó hiện đang làm việc như thế này:

  1. Bind tầm nhìn của tiêu đề để một tài sản boolean của ViewModel, sử dụng một bool-to-tầm nhìn chuyển đổi
  2. Sử dụng tài sản gắn liền trên tiêu đề để thiết lập chiều rộng của cột để không

Đây là mã.

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

đính kèm hành vi 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

hoạt động tốt! –

0

tôi đã thiết lập các Column Width = "0" không. Bây giờ cột trông giống như cột của nó không hiển thị. Nhưng tôi không biết nếu nó sẽ ảnh hưởng đến bất cứ điều gì khác. Nó có thể là một giải pháp giả nhưng bây giờ nó hoạt động.

+2

Người dùng vẫn có thể kéo chiều rộng cột – Paparazzi

Các vấn đề liên quan