diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
index 9141fb2463..5c09bab678 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
@@ -27,7 +27,6 @@ namespace Avalonia.Controls
private double? _minWidth;
private bool _settingWidthInternally;
private int _displayIndexWithFiller;
- private bool _isVisible;
private object _header;
private DataGridColumnHeader _headerCell;
private IControl _editingElement;
@@ -40,7 +39,6 @@ namespace Avalonia.Controls
///
protected internal DataGridColumn()
{
- _isVisible = true;
_displayIndexWithFiller = -1;
IsInitialDesiredWidthDetermined = false;
InheritsWidth = true;
@@ -174,32 +172,42 @@ namespace Avalonia.Controls
get => _editBinding;
}
+
+ ///
+ /// Defines the property.
+ ///
+ public static StyledProperty IsVisibleProperty =
+ Control.IsVisibleProperty.AddOwner();
+
///
/// Determines whether or not this column is visible.
///
public bool IsVisible
{
- get
- {
- return _isVisible;
- }
- set
- {
- if (value != IsVisible)
- {
- OwningGrid?.OnColumnVisibleStateChanging(this);
- _isVisible = value;
+ get => GetValue(IsVisibleProperty);
+ set => SetValue(IsVisibleProperty, value);
+ }
- if (_headerCell != null)
- {
- _headerCell.IsVisible = value;
- }
+ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
+ {
+ base.OnPropertyChanged(change);
- OwningGrid?.OnColumnVisibleStateChanged(this);
+ if (change.Property == IsVisibleProperty)
+ {
+ OwningGrid?.OnColumnVisibleStateChanging(this);
+ var isVisible = (change as AvaloniaPropertyChangedEventArgs).NewValue.Value;
+
+ if (_headerCell != null)
+ {
+ _headerCell.IsVisible = isVisible;
}
+
+ OwningGrid?.OnColumnVisibleStateChanged(this);
+ NotifyPropertyChanged(change.Property.Name);
}
}
+
///
/// Actual visible width after Width, MinWidth, and MaxWidth setting at the Column level and DataGrid level
/// have been taken into account