I have not seen an example on how to bind the TreeView to an object. I have a simple class that looks like this:
class Group
{
int id,
string name,
List<
Group
> children
}
Can you provide me with an example?
Thanks in advance for your help, Joel
3 Answers, 1 is accepted
0

Joel
Top achievements
Rank 2
Bronze
Iron
Iron
answered on 14 Nov 2018, 08:22 PM
I renamed my class to Item instead of Group... but same idea.
<
script
id
=
"treeview-template"
type
=
"text/kendo-ui-template"
>
#: item.text #
# if (!item.items) { #
<
a
class
=
'delete-link'
href
=
'\#'
></
a
>
# } #
</
script
>
<
div
class
=
"demo-section k-content"
>
<
h4
>Recursive data</
h4
>
@(
Html.Kendo().TreeView()
.TemplateId("treeview-template")
.Name("treeview-right")
.BindTo((IEnumerable<
Item
>)ViewBag.recursive, (NavigationBindingFactory<
TreeViewItem
> mappings) =>
{
mappings.For<
Item
>(binding => binding.ItemDataBound((item, category) =>
{
item.Text = category.Name;
item.ImageUrl = category.ImageUrl;
})
.Children(category => category.Items));
})
)
</
div
>
0

Joel
Top achievements
Rank 2
Bronze
Iron
Iron
answered on 14 Nov 2018, 08:29 PM
A more complete answer:
HomeController.cs
public
IActionResult Hierarchy()
{
ViewData[
"Message"
] =
"Your application description page."
;
ViewBag.recursive = GetRecursiveData();
return
View();
}
The Data method
private
IEnumerable<Item> GetRecursiveData()
{
List<Item> inline =
new
List<Item>
{
new
Item
{
Name =
"Storage"
,
ImageUrl =
"~/images/Customer.PNG"
,
Items =
new
List<Item>
{
new
Item()
{
Name =
"Wall Shelving"
,
ImageUrl =
"~/images/StoreFront.PNG"
,
Items =
new
List<Item>
{
new
Item()
{
Name =
"Sub Wall Shelving"
,
ImageUrl =
"~/images/Test.PNG"
},
new
Item
{
Name =
"Sub Floor Shelving"
,
ImageUrl =
"~/images/Test.PNG"
},
new
Item
{
Name =
"Sub Kids Storag"
,
ImageUrl =
"~/images/Test.PNG"
}
}
},
new
Item
{
Name =
"Floor Shelving"
,
ImageUrl =
"~/images/StoreFront.PNG"
},
new
Item
{
Name =
"Kids Storag"
,
ImageUrl =
"~/images/StoreFront.PNG"
}
}
}
};
return
inline;
}
The TreeView (again, renamed group instead of category)
<
script
type
=
"text/javascript"
>
$(document).on("click", ".delete-link", function (e) {
e.preventDefault();
var treeview = $("#treeview").data("treeview-right");
treeview.remove($(this).closest(".k-item"));
});
</
script
>
<
script
id
=
"treeview-template"
type
=
"text/kendo-ui-template"
>
#: item.text #
# if (!item.items) { #
<
a
class
=
'delete-link'
href
=
'\#'
></
a
>
# } #
</
script
>
<
div
class
=
"demo-section k-content"
>
<
h4
>Recursive data</
h4
>
@(
Html.Kendo().TreeView()
.TemplateId("treeview-template")
.Name("treeview-right")
.BindTo((IEnumerable<
Item
>)ViewBag.recursive, (NavigationBindingFactory<
TreeViewItem
> mappings) =>
{
mappings.For<
Item
>(binding => binding.ItemDataBound((item, group) =>
{
item.Text = group.Name;
item.ImageUrl = group.ImageUrl;
})
.Children(group => group.Items));
})
)
</
div
>
0
Accepted
Hello Joel,
After specifying the child nodes through the .Children() option, a second mapping for the child collection should be added. For example if we take the following model:
We can map the bindings for it as follows:
In addition to the above, you could also refer to the following TreeView Demo for ASP.NET MVC, where binding through the NavigationBindingFactory interface is also demonstrated:
Regards,
Dimitar
Progress Telerik
After specifying the child nodes through the .Children() option, a second mapping for the child collection should be added. For example if we take the following model:
public
class
ParentModel
{
public
string
Name {
get
;
set
; }
public
List<ChildModel> Categories;
}
We can map the bindings for it as follows:
mappings.For<ParentModel>(binding => binding.ItemDataBound((item, parent) =>
{
item.Text = parent.Name;
})
.Children(category => category.Categories));
mappings.For<ChildModel>(binding => binding.ItemDataBound((item, child) =>
{
item.Text = child.Name;
}));
In addition to the above, you could also refer to the following TreeView Demo for ASP.NET MVC, where binding through the NavigationBindingFactory interface is also demonstrated:
Regards,
Dimitar
Progress Telerik
Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.