2009-09-08 2 views
12

누군가가 GridViewColumn을 어떻게 든 숨기는 옵션이 있는지 알고 있습니까?C#/WPF : GridViewColumn 보이기 = false로 만드시겠습니까?

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

고마워요!

편집 : 명확성을 위해

불행히도 "IsVisible"속성은 없습니다. 나는 그것을 창조 할 길을 찾고 있습니다.

편집 : 피드백을 기반으로하는 솔루션은 다음과 같습니다.

<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 너비 열은 어떻게 생성하나요? ColumnIsVisible을 ConverterParmeter로 취하는 폭 IValueConverter에 Boolean을 작성 하시겠습니까?

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"Property는 없습니다. 그래서 그것을 만드는 방법을 찾고 있습니다. –

+0

편집에 대한 설명 : 사용자가 열의 크기를 조정할 수 있도록 허용하지만, 불행하게도 Enabled- 속성도 없습니다. –

+0

젠장!나는 노력하고있어 :-) –

-1

사용 설정을 기반으로 또 다른 솔루션입니다 열의 폭을 제로 나는 그것을 약간 변형시켰다. 이제 다음과 같이 작동

  1. 바인딩은 부울 - 투 - 가시성 변환
  2. 를 사용하여 뷰 모델의 부울 속성에 헤더의 가시성가 0
  3. 에 열의 폭을 설정하는 헤더에 연결된 속성을 사용하여

다음은 코드입니다.

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 : I 0으로 폭 = "0"열을 설정 한

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

잘 작동합니다! –

0

. 이제 열이 보이지 않는 것처럼 보입니다. 그러나 그것이 다른 것에 영향을 줄지 나는 모른다. 그것은 더미 솔루션 일지 모르지만 지금은 작동합니다.

+2

사용자는 여전히 열 너비를 끌 수 있습니다 – Paparazzi