diff --git a/README.md b/README.md
index 2882403..35f7081 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,24 @@
-
-# Blazor TreeView – How to implement custom filter
-
-This example shows how to implement a custom filter that reacts to the TreeViewNode’s Text when it is split by a comma and applies custom highlighting.
-
-
-
-The filter accepts the [NavigationFilterInfo](http://docs.devexpress.com/Blazor/DevExpress.Blazor.NavigationFilterInfo) structure to obtain the [FilterString](http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxTreeView.FilterString) value and uses a regular expression to parse the filter string. The [NodeTextTemplate](http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxTreeView.NodeTextTemplate) uses a regular expression to apply custom highlighting.
-
-
-
-## Files to Look At
-
-Index.razor
-
-
-
-## Documentation
-
-[TreeView – Search](http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxTreeView#filter-nodes)
\ No newline at end of file
+
+[](https://supportcenter.devexpress.com/ticket/details/T1094678)
+[](https://docs.devexpress.com/GeneralInformation/403183)
+
+
+# Blazor TreeView – How to implement custom filter
+
+This example shows how to implement a custom filter that reacts to the TreeViewNode’s Text when it is split by a comma and applies custom highlighting.
+
+
+
+The filter accepts the [NavigationFilterInfo](http://docs.devexpress.com/Blazor/DevExpress.Blazor.NavigationFilterInfo) structure to obtain the [FilterString](http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxTreeView.FilterString) value and uses a regular expression to parse the filter string. The [NodeTextTemplate](http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxTreeView.NodeTextTemplate) uses a regular expression to apply custom highlighting.
+
+
+
+## Files to Look At
+
+Index.razor
+
+
+
+## Documentation
+
+[TreeView – Search](http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxTreeView#filter-nodes)
diff --git a/VB/TreeViewCustomFilter.sln b/VB/TreeViewCustomFilter.sln
new file mode 100644
index 0000000..c814eb1
--- /dev/null
+++ b/VB/TreeViewCustomFilter.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.32002.185
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TreeViewCustomFilter", "TreeViewCustomFilter\TreeViewCustomFilter.vbproj", "{44E1B010-11E1-4537-BBA1-170CAE9F86B3}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {44E1B010-11E1-4537-BBA1-170CAE9F86B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {44E1B010-11E1-4537-BBA1-170CAE9F86B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {44E1B010-11E1-4537-BBA1-170CAE9F86B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {44E1B010-11E1-4537-BBA1-170CAE9F86B3}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {3ED7015D-5113-4AB2-B141-D496461D4B2E}
+ EndGlobalSection
+EndGlobal
diff --git a/VB/TreeViewCustomFilter/App.razor b/VB/TreeViewCustomFilter/App.razor
new file mode 100644
index 0000000..91c35f8
--- /dev/null
+++ b/VB/TreeViewCustomFilter/App.razor
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
Sorry, there's nothing at this address.
+
+
+
diff --git a/VB/TreeViewCustomFilter/Data/OfficeLocation.vb b/VB/TreeViewCustomFilter/Data/OfficeLocation.vb
new file mode 100644
index 0000000..a338638
--- /dev/null
+++ b/VB/TreeViewCustomFilter/Data/OfficeLocation.vb
@@ -0,0 +1,19 @@
+Namespace TreeViewCustomFilter.Data
+
+ Public Class OfficeLocation
+
+ Public Shared ReadOnly Offices As OfficeLocation() = {New OfficeLocation() With {.Name = "Africa", .Id = "1"}, New OfficeLocation() With {.Name = "Ethiopia", .Id = "2", .ParentId = "1"}, New OfficeLocation() With {.Name = "Dire Dawa", .Id = "3", .ParentId = "2"}, New OfficeLocation() With {.Name = "Addis Ababa", .Id = "4", .ParentId = "2"}, New OfficeLocation() With {.Name = "Nigeria", .Id = "5", .ParentId = "1"}, New OfficeLocation() With {.Name = "Lagos", .Id = "6", .ParentId = "5"}, New OfficeLocation() With {.Name = "Kano", .Id = "7", .ParentId = "5"}, New OfficeLocation() With {.Name = "Asia", .Id = "8"}, New OfficeLocation() With {.Name = "China", .Id = "9", .ParentId = "8"}, New OfficeLocation() With {.Name = "Beijing", .Id = "10", .ParentId = "9"}, New OfficeLocation() With {.Name = "Shanghai", .Id = "11", .ParentId = "9"}, New OfficeLocation() With {.Name = "India", .Id = "12", .ParentId = "8"}, New OfficeLocation() With {.Name = "Indianapolis", .Id = "13", .ParentId = "12"}, New OfficeLocation() With {.Name = "New Delhi", .Id = "14", .ParentId = "12"}, New OfficeLocation() With {.Name = "Australia", .Id = "15"}, New OfficeLocation() With {.Name = "Australia", .Id = "16", .ParentId = "15"}, New OfficeLocation() With {.Name = "Canberra", .Id = "17", .ParentId = "16"}, New OfficeLocation() With {.Name = "Melbourne", .Id = "18", .ParentId = "16"}, New OfficeLocation() With {.Name = "Sydney", .Id = "19", .ParentId = "16"}, New OfficeLocation() With {.Name = "Europe", .Id = "20"}, New OfficeLocation() With {.Name = "Germany", .Id = "21", .ParentId = "20"}, New OfficeLocation() With {.Name = "Berlin", .Id = "22", .ParentId = "20"}, New OfficeLocation() With {.Name = "Hamburg", .Id = "23", .ParentId = "20"}, New OfficeLocation() With {.Name = "France", .Id = "24", .ParentId = "20"}, New OfficeLocation() With {.Name = "Paris", .Id = "25", .ParentId = "24"}, New OfficeLocation() With {.Name = "North America", .Id = "26"}, New OfficeLocation() With {.Name = "Mexico", .Id = "27", .ParentId = "26"}, New OfficeLocation() With {.Name = "Mexico City", .Id = "28", .ParentId = "27"}, New OfficeLocation() With {.Name = "United States", .Id = "29", .ParentId = "26"}, New OfficeLocation() With {.Name = "New York", .Id = "30", .ParentId = "29"}, New OfficeLocation() With {.Name = "Washington", .Id = "31", .ParentId = "29"}, New OfficeLocation() With {.Name = "South America", .Id = "32"}, New OfficeLocation() With {.Name = "Brazil", .Id = "33", .ParentId = "32"}, New OfficeLocation() With {.Name = "Brasilia", .Id = "34", .ParentId = "33"}, New OfficeLocation() With {.Name = "Colombia", .Id = "35", .ParentId = "32"}, New OfficeLocation() With {.Name = "Bogota", .Id = "36", .ParentId = "35"}}
+
+ Public Property Id As String
+
+ Public ReadOnly Property CssClass As String
+ Get
+ Return "itemclass"
+ End Get
+ End Property
+
+ Public Property ParentId As String
+
+ Public Property Name As String
+ End Class
+End Namespace
diff --git a/VB/TreeViewCustomFilter/NOTICE.txt b/VB/TreeViewCustomFilter/NOTICE.txt
new file mode 100644
index 0000000..f0858d6
--- /dev/null
+++ b/VB/TreeViewCustomFilter/NOTICE.txt
@@ -0,0 +1,12 @@
+The following open source libraries are used and included within thеse sample/demonstration projects:
+
+Bootstrap (Open Source – MIT License)
+Copyright (c) 2011-2021 Twitter, Inc. / Copyright (c) 2011-2021 The Bootstrap Authors
+https://github.com/twbs/bootstrap/blob/main/LICENSE
+
+open-iconic (Open Source – MIT License and SIL Open Font License)
+Copyright (c) 2014 Waybury
+https://github.com/iconic/open-iconic/blob/master/ICON-LICENSE
+https://github.com/iconic/open-iconic/blob/master/FONT-LICENSE
+
+The open source libraries included in these sample/demonstration projects are done so pursuant to each individual open source library license and subject to the disclaimers and limitations on liability set forth in each open source library license.
\ No newline at end of file
diff --git a/VB/TreeViewCustomFilter/Pages/Error.cshtml.vb b/VB/TreeViewCustomFilter/Pages/Error.cshtml.vb
new file mode 100644
index 0000000..8c4fde1
--- /dev/null
+++ b/VB/TreeViewCustomFilter/Pages/Error.cshtml.vb
@@ -0,0 +1,35 @@
+Imports System
+Imports System.Collections.Generic
+Imports System.Diagnostics
+Imports System.Linq
+Imports System.Threading.Tasks
+Imports Microsoft.AspNetCore.Mvc
+Imports Microsoft.AspNetCore.Mvc.RazorPages
+Imports Microsoft.Extensions.Logging
+
+Namespace TreeViewCustomFilter.Pages
+
+
+
+ Public Class ErrorModel
+ Inherits PageModel
+
+ Public Property RequestId As String?
+
+ Public ReadOnly Property ShowRequestId As Boolean
+ Get
+ Return Not String.IsNullOrEmpty(RequestId)
+ End Get
+ End Property
+
+ Private ReadOnly _logger As ILogger(Of ErrorModel)
+
+ Public Sub New(ByVal logger As ILogger(Of ErrorModel))
+ _logger = logger
+ End Sub
+
+ Public Sub OnGet()
+ RequestId = If(Activity.Current?.Id, HttpContext.TraceIdentifier)
+ End Sub
+ End Class
+End Namespace
diff --git a/VB/TreeViewCustomFilter/Program.vb b/VB/TreeViewCustomFilter/Program.vb
new file mode 100644
index 0000000..45dc6da
--- /dev/null
+++ b/VB/TreeViewCustomFilter/Program.vb
@@ -0,0 +1,218 @@
+Imports Microsoft.AspNetCore.Components
+' Add services to the container.
+' The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
+Imports Microsoft.AspNetCore.Components.Web ' TODO: Error SkippedTokensTrivia ';'
+
+' TODO: Error SkippedTokensTrivia ';'
+' TODO: Error SkippedTokensTrivia ';'
+' TODO: Error SkippedTokensTrivia ';'
+' TODO: Error SkippedTokensTrivia '}'
+' TODO: Error SkippedTokensTrivia ')'
+' TODO: Error SkippedTokensTrivia ';'
+' Configure the HTTP request pipeline.
+' TODO: Error SkippedTokensTrivia 'if'
+' TODO: Error SkippedTokensTrivia ')'
+' TODO: Error SkippedTokensTrivia '{'
+' TODO: Error SkippedTokensTrivia ';'
+' TODO: Error SkippedTokensTrivia '}'
+' TODO: Error SkippedTokensTrivia ';'
+' TODO: Error SkippedTokensTrivia ';'
+' TODO: Error SkippedTokensTrivia ';'
+' TODO: Error SkippedTokensTrivia ';'
+' TODO: Error SkippedTokensTrivia ';'
+ ''' Cannot convert FieldDeclarationSyntax, System.ArgumentOutOfRangeException: Exception of type 'System.ArgumentOutOfRangeException' was thrown.
+''' Parameter name: member
+''' at ICSharpCode.CodeConverter.VB.NodesVisitor.GetMemberContext(MemberDeclarationSyntax member)
+''' at ICSharpCode.CodeConverter.VB.NodesVisitor.VisitFieldDeclaration(FieldDeclarationSyntax node)
+''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
+''' at ICSharpCode.CodeConverter.VB.CommentConvertingVisitorWrapper`1.Accept(SyntaxNode csNode, Boolean addSourceMapping)
+'''
+''' Input:
+'''
+
+var builder = WebApplication.CreateBuilder(args);
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'builder.Services.AddRazorPages' at character 202
+'''
+'''
+''' Input:
+'''
+// Add services to the container.
+builder.Services.AddRazorPages
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '()' at character 232
+'''
+'''
+''' Input:
+''' ();
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'builder.Services.AddServerS...' at character 236
+'''
+'''
+''' Input:
+''' builder.Services.AddServerSideBlazor
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '()' at character 272
+'''
+'''
+''' Input:
+''' ();
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'builder.Services.AddDevExpr...' at character 276
+'''
+'''
+''' Input:
+''' builder.Services.AddDevExpressBlazor
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '()' at character 312
+'''
+'''
+''' Input:
+''' ();
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'builder.Services.Configure<...' at character 318
+'''
+'''
+''' Input:
+'''
+builder.Services.Configure
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '(options ' at character 391
+'''
+'''
+''' Input:
+''' (options => {
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'options.BootstrapVersion' at character 409
+'''
+'''
+''' Input:
+''' options.BootstrapVersion =
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'DevExpress.Blazor.Bootstrap...' at character 436
+'''
+'''
+''' Input:
+''' DevExpress.Blazor.BootstrapVersion.v5;
+});
+
+''' ''' Cannot convert FieldDeclarationSyntax, System.ArgumentOutOfRangeException: Exception of type 'System.ArgumentOutOfRangeException' was thrown.
+''' Parameter name: member
+''' at ICSharpCode.CodeConverter.VB.NodesVisitor.GetMemberContext(MemberDeclarationSyntax member)
+''' at ICSharpCode.CodeConverter.VB.NodesVisitor.VisitFieldDeclaration(FieldDeclarationSyntax node)
+''' at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
+''' at ICSharpCode.CodeConverter.VB.CommentConvertingVisitorWrapper`1.Accept(SyntaxNode csNode, Boolean addSourceMapping)
+'''
+''' Input:
+'''
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+if
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '(' at character 551
+'''
+'''
+''' Input:
+''' (!
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'app.Environment.IsDevelopment' at character 553
+'''
+'''
+''' Input:
+''' app.Environment.IsDevelopment
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '()' at character 582
+'''
+'''
+''' Input:
+''' ())
+{
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'app.UseExceptionHandler' at character 592
+'''
+'''
+''' Input:
+''' app.UseExceptionHandler
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '(' at character 615
+'''
+'''
+''' Input:
+''' ("/Error");
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'app.UseHsts' at character 763
+'''
+'''
+''' Input:
+''' // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
+ app.UseHsts
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '()' at character 774
+'''
+'''
+''' Input:
+''' ();
+}
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'app.UseHttpsRedirection' at character 780
+'''
+'''
+''' Input:
+''' app.UseHttpsRedirection
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '()' at character 803
+'''
+'''
+''' Input:
+''' ();
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'app.UseStaticFiles' at character 808
+'''
+'''
+''' Input:
+'''
+app.UseStaticFiles
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '()' at character 826
+'''
+'''
+''' Input:
+''' ();
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'app.UseRouting' at character 831
+'''
+'''
+''' Input:
+'''
+app.UseRouting
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '()' at character 845
+'''
+'''
+''' Input:
+''' ();
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'app.MapBlazorHub' at character 851
+'''
+'''
+''' Input:
+'''
+
+app.MapBlazorHub
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '()' at character 867
+'''
+'''
+''' Input:
+''' ();
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'app.MapFallbackToPage' at character 871
+'''
+'''
+''' Input:
+''' app.MapFallbackToPage
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '(' at character 892
+'''
+'''
+''' Input:
+''' ("/_Host");
+
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in 'app.Run' at character 905
+'''
+'''
+''' Input:
+'''
+app.Run
+''' ''' Cannot convert IncompleteMemberSyntax, CONVERSION ERROR: Conversion for IncompleteMember not implemented, please report this issue in '()' at character 912
+'''
+'''
+''' Input:
+''' ();
+'''
\ No newline at end of file
diff --git a/VB/TreeViewCustomFilter/TreeViewCustomFilter.vbproj b/VB/TreeViewCustomFilter/TreeViewCustomFilter.vbproj
new file mode 100644
index 0000000..4f549cb
--- /dev/null
+++ b/VB/TreeViewCustomFilter/TreeViewCustomFilter.vbproj
@@ -0,0 +1,19 @@
+
+
+
+ On
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/VB/TreeViewCustomFilter/_Imports.razor b/VB/TreeViewCustomFilter/_Imports.razor
new file mode 100644
index 0000000..6ba90a3
--- /dev/null
+++ b/VB/TreeViewCustomFilter/_Imports.razor
@@ -0,0 +1,12 @@
+@using System.Net.Http
+@using Microsoft.AspNetCore.Authorization
+@using Microsoft.AspNetCore.Components.Authorization
+@using Microsoft.AspNetCore.Components.Forms
+@using Microsoft.AspNetCore.Components.Routing
+@using Microsoft.AspNetCore.Components.Web
+@using Microsoft.AspNetCore.Components.Web.Virtualization
+@using Microsoft.JSInterop
+@using TreeViewCustomFilter
+@using TreeViewCustomFilter.Shared
+
+@using DevExpress.Blazor
\ No newline at end of file
diff --git a/VB/TreeViewCustomFilter/appsettings.Development.json b/VB/TreeViewCustomFilter/appsettings.Development.json
new file mode 100644
index 0000000..770d3e9
--- /dev/null
+++ b/VB/TreeViewCustomFilter/appsettings.Development.json
@@ -0,0 +1,9 @@
+{
+ "DetailedErrors": true,
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/VB/TreeViewCustomFilter/appsettings.json b/VB/TreeViewCustomFilter/appsettings.json
new file mode 100644
index 0000000..10f68b8
--- /dev/null
+++ b/VB/TreeViewCustomFilter/appsettings.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*"
+}
diff --git a/VB/TreeViewCustomFilter/readme.html b/VB/TreeViewCustomFilter/readme.html
new file mode 100644
index 0000000..ace82de
--- /dev/null
+++ b/VB/TreeViewCustomFilter/readme.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+