У меня есть намного более простое решение, чем использование Attached Behavior.
Все, что вам нужно сделать, это связать свойство Width GridViewColumn с логическим значением в вашей ViewModel. Затем создайте простой конвертер, такой как BooleanToWidthConverter, который принимает логическое значение и возвращает значение типа double, ноль, если он равен false, и ширину x, если это значение true.
Надеюсь, это поможет и облегчит вашу жизнь.
XAML:
<GridViewColumn x:Name="MyHiddenGridViewColumn"
Width={Binding Path=IsColumnVisibleProperty, Converter={StaticResource BooleanToWidthConverter}}">
<!-- GridViewColumn.HeaderTemplate etc. goes here. -->
</GridViewColumn>
Преобразователь:
public class BooleanToWidthConverter : IValueConverter
{
private const double Column_Width = 40.0;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null && value != DependencyProperty.UnsetValue)
{
bool isVisible = (bool) value;
return isVisible ? Column_Width : 0;
}
return Column_Width;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}