diff --git a/src/Avalonia.Controls.DataGrid/DataGrid.cs b/src/Avalonia.Controls.DataGrid/DataGrid.cs
index 7c57ea3db9..5bb2763566 100644
--- a/src/Avalonia.Controls.DataGrid/DataGrid.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGrid.cs
@@ -31,7 +31,7 @@ namespace Avalonia.Controls
///
/// Displays data in a customizable grid.
///
- [PseudoClasses(":invalid")]
+ [PseudoClasses(":invalid", ":empty-rows", ":empty-columns")]
public partial class DataGrid : TemplatedControl
{
private const string DATAGRID_elementRowsPresenterName = "PART_RowsPresenter";
@@ -711,6 +711,7 @@ namespace Avalonia.Controls
DisplayData = new DataGridDisplayData(this);
ColumnsInternal = CreateColumnsInstance();
+ ColumnsInternal.CollectionChanged += ColumnsInternal_CollectionChanged;
RowHeightEstimate = DATAGRID_defaultRowHeight;
RowDetailsHeightEstimate = 0;
@@ -727,6 +728,8 @@ namespace Avalonia.Controls
CurrentCellCoordinates = new DataGridCellCoordinates(-1, -1);
RowGroupHeaderHeightEstimate = DATAGRID_defaultRowHeight;
+
+ UpdatePseudoClasses();
}
private void SetValueNoCallback(AvaloniaProperty property, T value, BindingPriority priority = BindingPriority.LocalValue)
@@ -851,9 +854,27 @@ namespace Avalonia.Controls
// can be set when the DataGrid is not part of the visual tree
_measured = false;
InvalidateMeasure();
+
+ UpdatePseudoClasses();
}
}
+ private void ColumnsInternal_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
+ {
+ if (e.Action == NotifyCollectionChangedAction.Add
+ || e.Action == NotifyCollectionChangedAction.Remove
+ || e.Action == NotifyCollectionChangedAction.Reset)
+ {
+ UpdatePseudoClasses();
+ }
+ }
+
+ internal void UpdatePseudoClasses()
+ {
+ PseudoClasses.Set(":empty-columns", !ColumnsInternal.GetVisibleColumns().Any());
+ PseudoClasses.Set(":empty-rows", !DataConnection.Any());
+ }
+
private void OnSelectedIndexChanged(AvaloniaPropertyChangedEventArgs e)
{
if (!_areHandlersSuspended)
@@ -1348,7 +1369,6 @@ namespace Avalonia.Controls
internal DataGridColumnCollection ColumnsInternal
{
get;
- private set;
}
internal int AnchorSlot
diff --git a/src/Avalonia.Controls.DataGrid/DataGridDataConnection.cs b/src/Avalonia.Controls.DataGrid/DataGridDataConnection.cs
index 19539bf032..a94acdec57 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridDataConnection.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridDataConnection.cs
@@ -77,24 +77,7 @@ namespace Avalonia.Controls
private set;
}
- public int Count
- {
- get
- {
- IList list = List;
- if (list != null)
- {
- return list.Count;
- }
-
- if(DataSource is DataGridCollectionView cv)
- {
- return cv.Count;
- }
-
- return DataSource?.Cast