diff --git a/samples/VirtualizationDemo/MainWindow.axaml b/samples/VirtualizationDemo/MainWindow.axaml
index 94e7c96a76..e064e6ab32 100644
--- a/samples/VirtualizationDemo/MainWindow.axaml
+++ b/samples/VirtualizationDemo/MainWindow.axaml
@@ -12,5 +12,8 @@
+
+
+
diff --git a/samples/VirtualizationDemo/ViewModels/ExpanderItemViewModel.cs b/samples/VirtualizationDemo/ViewModels/ExpanderItemViewModel.cs
new file mode 100644
index 0000000000..a17fc2d303
--- /dev/null
+++ b/samples/VirtualizationDemo/ViewModels/ExpanderItemViewModel.cs
@@ -0,0 +1,21 @@
+using MiniMvvm;
+
+namespace VirtualizationDemo.ViewModels;
+
+public class ExpanderItemViewModel : ViewModelBase
+{
+ private string? _header;
+ private bool _isExpanded;
+
+ public string? Header
+ {
+ get => _header;
+ set => RaiseAndSetIfChanged(ref _header, value);
+ }
+
+ public bool IsExpanded
+ {
+ get => _isExpanded;
+ set => RaiseAndSetIfChanged(ref _isExpanded, value);
+ }
+}
diff --git a/samples/VirtualizationDemo/ViewModels/ExpanderPageViewModel.cs b/samples/VirtualizationDemo/ViewModels/ExpanderPageViewModel.cs
new file mode 100644
index 0000000000..f2807a803b
--- /dev/null
+++ b/samples/VirtualizationDemo/ViewModels/ExpanderPageViewModel.cs
@@ -0,0 +1,17 @@
+using System.Collections.ObjectModel;
+using System.Linq;
+
+namespace VirtualizationDemo.ViewModels;
+
+internal class ExpanderPageViewModel
+{
+ public ExpanderPageViewModel()
+ {
+ Items = new(Enumerable.Range(0, 100).Select(x => new ExpanderItemViewModel
+ {
+ Header = $"Item {x}",
+ }));
+ }
+
+ public ObservableCollection Items { get; set; }
+}
diff --git a/samples/VirtualizationDemo/ViewModels/MainWindowViewModel.cs b/samples/VirtualizationDemo/ViewModels/MainWindowViewModel.cs
index 6d3590307c..6432503595 100644
--- a/samples/VirtualizationDemo/ViewModels/MainWindowViewModel.cs
+++ b/samples/VirtualizationDemo/ViewModels/MainWindowViewModel.cs
@@ -5,4 +5,5 @@ namespace VirtualizationDemo.ViewModels;
internal class MainWindowViewModel : ViewModelBase
{
public ChatPageViewModel Chat { get; } = new();
+ public ExpanderPageViewModel Expanders { get; } = new();
}
diff --git a/samples/VirtualizationDemo/Views/ExpanderPageView.axaml b/samples/VirtualizationDemo/Views/ExpanderPageView.axaml
new file mode 100644
index 0000000000..972d885229
--- /dev/null
+++ b/samples/VirtualizationDemo/Views/ExpanderPageView.axaml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/VirtualizationDemo/Views/ExpanderPageView.axaml.cs b/samples/VirtualizationDemo/Views/ExpanderPageView.axaml.cs
new file mode 100644
index 0000000000..df3689cf24
--- /dev/null
+++ b/samples/VirtualizationDemo/Views/ExpanderPageView.axaml.cs
@@ -0,0 +1,13 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace VirtualizationDemo.Views;
+
+public partial class ExpanderPageView : UserControl
+{
+ public ExpanderPageView()
+ {
+ InitializeComponent();
+ }
+}
\ No newline at end of file