2009-09-08 15 views
12

क्या किसी को पता है कि किसी भी तरह ग्रिड व्यू कॉलम को छिपाने का विकल्प है:सी #/डब्ल्यूपीएफ: एक ग्रिड व्यू कॉलम दृश्यमान = झूठी बनाओ?

<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 करने के लिए एक बूलियन लिखें, जो कनवर्टर पैरामीटर के रूप में कॉलम IVisible लेता है?

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

त्वरित प्रतिक्रिया के लिए धन्यवाद। दुर्भाग्यवश, कोई "अविश्वसनीय" संपत्ति नहीं है .. इसलिए मैं इसे बनाने का एक तरीका ढूंढ रहा हूं। –

+0

आपके संपादन पर टिप्पणी करें: इससे उपयोगकर्ता को कॉलम का आकार बदलने की अनुमति मिल जाएगी, दुर्भाग्यवश कोई सक्षम-संपत्ति नहीं है। –

+0

अरे!मैं कोशिश कर रहा हूं :-) –

-1

उपयोग की स्थापना के आधार पर एक और समाधान है कॉलम की चौड़ाई शून्य तक। मैंने इसे थोड़ा सा संशोधित किया है। अब यह इस तरह काम करता है:

  1. बाइंड ViewModel की एक बूलियन संपत्ति के लिए शीर्ष लेख की दृश्यता, एक bool करने वाली दृश्यता कनवर्टर
  2. का उपयोग कर शून्य
  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:

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

मैं शून्य करने के लिए कॉलम की चौड़ाई = "0" निर्धारित किया है। अब कॉलम दिखता है जैसे यह दिखाई नहीं दे रहा है। लेकिन मुझे नहीं पता कि यह किसी और चीज को प्रभावित करेगा या नहीं। यह एक डमी समाधान हो सकता है लेकिन अभी के लिए यह काम करता है।

+2

उपयोगकर्ता अभी भी कॉलम चौड़ाई खींच सकता है – Paparazzi

संबंधित मुद्दे