Hi all!
On my blazor server page i'm trying to get a RadzenTree working with Checkboxes, I retrieve my data via EF Core but i think this does not work together with the ChildrenProperty on RadzenTreeLevel.
On the following page I want to retrieve user groups for the active user via EF Core and also group members for the corresponding groups. When debugging I see that all required objects and structures are there. But when expanding the tree i get an exception.
Loading the page and showing the first level of the tree works:
But when clicking the expand icon the exception follows:
I don't think the data is false:

Here is the code of the page:
@page "/calendar"
@using X.DbAccess.Services
@using X.Models
@using X.WebApp.Components.Dialogs
@using System.Collections.ObjectModel
@inject UserService _userService;
@inject NavigationManager _navigationManager;
@inject ProtectedSessionStorage _sessionStore;
@inject DialogService _dialogService;
<PageTitle>Calendar</PageTitle>
<div class="container-fluid">
<div class="row my-5">
<div class="col-lg-6 offset-lg-3">
<RadzenCard>
<RadzenTree AllowCheckBoxes="true" @bind-CheckedValues=@CheckedValues Style="width: 100%; height: 300px" Data=@userGroups
ItemRender="@TreeItemRender">
<RadzenTreeLevel TextProperty="Name" ChildrenProperty="GroupMembers" />
<RadzenTreeLevel TextProperty="Id" HasChildren=@(gm => false)></RadzenTreeLevel>
</RadzenTree>
</RadzenCard>
</div>
</div>
</div>
@code
{
IEnumerable<object> checkedValues;
IEnumerable<UserGroup> userGroups;
UserGroup firstGroup;
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
//Get logged in user details from session storage
var activeUser = await _sessionStore.GetAsync<User>("userDetails");
//Get groups for logged in user
userGroups = await _userService.GetUserGroups(activeUser.Value.Id);
//Set first group
firstGroup = userGroups.FirstOrDefault();
//Set members of first group
checkedValues = firstGroup.GroupMembers;
}
void TreeItemRender(TreeItemRenderEventArgs args)
{
if (args.Value == firstGroup && !args.Data.Cast<object>().Any())
{
args.Checked = null;
}
}
IEnumerable<object> CheckedValues
{
get => checkedValues;
set
{
checkedValues = value;
if (checkedValues != null)
{
//console.Log($"CheckedValues Changed {string.Join(Environment.NewLine, value.Select(GetText))}");
}
}
}
}
And this is the EF Core method (GetUserGroups)
public async Task<IEnumerable<UserGroup>?> GetUserGroups(int userId)
{
try
{
using (var context = await _dbContextFactory.CreateDbContextAsync())
{
IEnumerable<UserGroup> userGroups = await context.UserGroups
.Include(gm => gm.GroupMembers)
.Where(p => p.UserId == userId)
.ToListAsync();
if (userGroups != null && userGroups.Count() > 0)
{
return userGroups;
}
return null;
}
}
catch (Exception ex)
{
throw;
}
}
What am i doing wrong or missing here?




