diff --git a/README.md b/README.md index e63a722..a59d6d6 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,37 @@ -# How to load child items on demand in wpf treeview? -This repository describes how to load child items on demand in wpf treeview +# How to load child items on demand in WPF TreeView + +This repository describes how to load child items on demand in [WPF TreeView](https://www.syncfusion.com/wpf-controls/treeview) (SfTreeView). + +You can load child items for the node in [Execute](https://learn.microsoft.com/en-us/dotnet/api/system.windows.input.routedcommand.execute?view=netframework-4.0) method of `LoadOnDemandCommand`. Execute method will get called when user expands the tree node. In `LoadOnDemand.Execute` method, you have can perform following operations, + +* Show or hide busy indicator in the place of expander by setting [TreeViewNode.ShowExpanderAnimation](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.TreeView.Engine.TreeViewNode.html#Syncfusion_UI_Xaml_TreeView_Engine_TreeViewNode_ShowExpanderAnimation) until the data fetched. +* Once data fetched, you can populate the child nodes by calling [TreeViewNode.PopulateChildNodes](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.TreeView.Engine.TreeViewNode.html#Syncfusion_UI_Xaml_TreeView_Engine_TreeViewNode_PopulateChildNodes_System_Collections_IEnumerable_) method by passing the child items collection. +* When load on-demand command executes expanding operation will not be handled by TreeView. So, you have to set [TreeViewNode.IsExpanded](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.TreeView.Engine.TreeViewNode.html#Syncfusion_UI_Xaml_TreeView_Engine_TreeViewNode_IsExpanded) property to true to expand the tree node after populating child nodes. +* You can skip population of child items again and again when every time the node expands, based on [TreeViewNode.ChildNodes](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.TreeView.Engine.TreeViewNode.html#Syncfusion_UI_Xaml_TreeView_Engine_TreeViewNode_ChildNodes) count. + +``` csharp +/// +/// Execute method is called when any item is requested for load-on-demand items. +/// +/// TreeViewNode is passed as default parameter +private void ExecuteOnDemandLoading(object obj) +{ + var node = obj as TreeViewNode; + + // Skip the repeated population of child items when every time the node expands. + if (node.ChildNodes.Count > 0) + { + node.IsExpanded = true; + return; + } + + //Animation starts for expander to show progressing of load on demand + node.ShowExpanderAnimation = true; + var sfTreeView = Application.Current.MainWindow.FindName("sfTreeView") as SfTreeView; + sfTreeView.Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() => + { + currentNode = node; + timer.Start(); + })); +} +``` \ No newline at end of file