We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. (Last updated on: June 24, 2019).
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

How to customize TreeView ItemTemplate based on the node expanded state in Xamarin.Forms (SfTreeView)

Platform: Xamarin.Forms |
Control: SfTreeView |
Published Date: April 14, 2020 |
Last Revised Date: April 14, 2020

You can customize the TreeView ItemTemplate based on the node whether the node is expanded or not in Xamarin.Forms SfTreeView by DataTemplateSelector.

C#

Changing the node Template at runtime by using OnSelectTemplate method based on node expanded state.

public class ItemTemplateSelector : DataTemplateSelector
{
    public DataTemplate RootNodeTemplate { get; set; }
    public DataTemplate ChildNodeTemplate { get; set; }
 
    public DataTemplate CollapsedTemplate { get; set; }
 
    public ItemTemplateSelector()
    {
        this.RootNodeTemplate = new DataTemplate(typeof(RootNodeTemplate));
        this.ChildNodeTemplate = new DataTemplate(typeof(ChildNodeTemplate));
        this.CollapsedTemplate = new DataTemplate(typeof(CollapsedTemplate));
    }
    protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
    {
        var treeviewNode = item as TreeViewNode;
        if (treeviewNode == null)
            return null;
        if (!treeviewNode.IsExpanded && treeviewNode.HasChildNodes && treeviewNode.Level == 0)
            return this.CollapsedTemplate;
        else if (treeviewNode.Level == 0)
            return this.RootNodeTemplate;
        else
            return this.ChildNodeTemplate;
    }
}

 

XAML

DataTemplateSelector bound to ItemTemplate property.

<ContentPage.Resources>
    <ResourceDictionary>
        <local:ItemTemplateSelector x:Key="ItemTemplateSelector" />
    </ResourceDictionary>
</ContentPage.Resources>
 
<StackLayout Orientation="Vertical" Padding="5">
    <syncfusion:SfTreeView x:Name="treeView" NotificationSubscriptionMode="CollectionChange,PropertyChange"  
                            ItemHeight="40"
                            Indentation="15"
                            ExpanderWidth="40"
                            ChildPropertyName="SubFiles"
                            ItemsSource="{Binding ImageNodeInfo}"
                            ItemTemplate="{StaticResource ItemTemplateSelector}"
                            AutoExpandMode="AllNodesExpanded">
    </syncfusion:SfTreeView>
</StackLayout>

Output

CustomizedItemTemplate

View sample in GitHub

2X faster development

The ultimate Xamarin UI toolkit to boost your development speed.
ADD COMMENT
You must log in to leave a comment

Please sign in to access our KB

This page will automatically be redirected to the sign-in page in 10 seconds.

Up arrow icon

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

Live Chat Icon For mobile
Live Chat Icon