+<TreeView Nodes="Items"
+ GetChildNodes="@(item => item.Children)"
+ HasChildNodes="@(item => item.Children?.Any() == true)"
+ @bind-SelectedNode="selectedNode"
+ @bind-ExpandedNodes="expandedNodes"
+ Virtualize>
+ <NodeContent>
+ <Icon Name="IconName.Folder" />
+ @context.Text
+ </NodeContent>
+</TreeView>
+
+
+@code {
+ public class Item
+ {
+ public string Text { get; set; }
+ public IEnumerable<Item> Children { get; set; }
+ }
+
+ protected override void OnInitialized()
+ {
+ Items = Enumerable.Range( 1, 4 ).Select( rootIndex => new Item
+ {
+ Text = $"Root Node {rootIndex}",
+ Children = Enumerable.Range( 1, 100 ).Select( childIndex => new Item
+ {
+ Text = $"Root {rootIndex} - Child {childIndex}",
+ Children = Enumerable.Empty<Item>()
+ } )
+ } ).ToList();
+
+ base.OnInitialized();
+ }
+
+ IEnumerable<Item> Items;
+
+ IList<Item> expandedNodes = new List<Item>();
+ Item selectedNode;
+}
+
+
diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/TreeView/Examples/TreeViewVirtualizationExample.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/TreeView/Examples/TreeViewVirtualizationExample.razor
new file mode 100644
index 0000000000..a41d5bfe54
--- /dev/null
+++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/TreeView/Examples/TreeViewVirtualizationExample.razor
@@ -0,0 +1,41 @@
+@namespace Blazorise.Docs.Docs.Examples
+
+