このようにGridViewColumnを非表示にするオプションがあるかどうか誰かが知っていますか?
<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();
}
}
ありがとうございます!
乾杯
編集:変更された質問を反映します。
幅0の列を作成するのはどうですか? ColumnIsVisibleをConverterParmeterとして使用するブール値を幅IValueConverterに記述しますか?
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();
}
}
何かのようなもの:
<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>
ここ は、列の幅をゼロに設定することに基づく別の解決策です。少し変更しました。これで、次のように機能します。
これがコードです。
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"
}
列幅をゼロに設定するという概念を使用しているが、IValueConverter
を使用する副作用がない(ユーザーは列をより広くドラッグできます)というより単純なアプローチの1つは、新しいゲッター/セッターを作成することですこれは、ColumnIsVisible
変数に基づいて幅を返し、それにバインドします。
_public double ColumnWidth
{
get
{
if (this.ColumnIsVisible)
{
return 100;
}
else
{
return 0;
}
}
set
{
OnPropertyChanged("ColumnWidth");
}
}
_
バインディングをTwoWayにして、ユーザーが列をより広くドラッグしようとすると、OnPropertyChanged
が呼び出され、幅が0にリセットされます。ただし、バインディングにはバインディングプロキシを使用する必要がある場合があります。また、ColumnIsVisibleが更新されるたびに、OnPropertyChanged("ColumnWidth")
への呼び出しを追加します:)
列のWidth = "0"をゼロに設定しました。これで、列は表示されないように見えます。しかし、それが他の何かに影響を与えるかどうかはわかりません。ダミーの解決策かもしれませんが、今のところは機能します。