diff --git a/src/Avalonia.Controls/VirtualizingStackPanel.cs b/src/Avalonia.Controls/VirtualizingStackPanel.cs
index ad2ae9278c..7cca0986ad 100644
--- a/src/Avalonia.Controls/VirtualizingStackPanel.cs
+++ b/src/Avalonia.Controls/VirtualizingStackPanel.cs
@@ -130,6 +130,16 @@ namespace Avalonia.Controls
set { SetValue(AreVerticalSnapPointsRegularProperty, value); }
}
+ ///
+ /// Gets the index of the first realized element, or -1 if no elements are realized.
+ ///
+ public int FirstRealizedIndex => _realizedElements?.FirstIndex ?? -1;
+
+ ///
+ /// Gets the index of the last realized element, or -1 if no elements are realized.
+ ///
+ public int LastRealizedIndex => _realizedElements?.LastIndex ?? -1;
+
protected override Size MeasureOverride(Size availableSize)
{
if (!IsEffectivelyVisible)
diff --git a/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs b/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs
index 76fc31c50d..2cdd4eaf95 100644
--- a/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs
@@ -37,7 +37,7 @@ namespace Avalonia.Controls.UnitTests
{
using var app = App();
var items = Enumerable.Range(0, 100).Select(x => new Button { Width = 25, Height = 10});
- var (target, scroll, itemsControl) = CreateTarget(items: items, useItemTemplate: false);
+ var (target, scroll, itemsControl) = CreateTarget(items: items, itemTemplate: null);
Assert.Equal(1000, scroll.Extent.Height);
@@ -252,7 +252,7 @@ namespace Avalonia.Controls.UnitTests
{
using var app = App();
var items = new ObservableCollection