I follow the demo of RadzenTree. I can drag the tree node item to overlap on the other items in the tree view. When I drop the node to the other parent item, the view didn't change. The dragged node is not moved to the new parent.
<RadzenTree Style="height: 600px" Data=@departments ItemRender="ItemRender">
<RadzenTreeLevel TextProperty="Name" ChildrenProperty="Departments"
Expanded=@(e => true) HasChildren=@(e => ((Department)e).Departments?.Any() == true)>
</RadzenTreeLevel>
</RadzenTree>
@code {
IEnumerable<Department> departments;
Department selectedDepartment;
object selectedTreeItem;
protected override async Task OnInitializedAsync()
{
departments = await useCases.GetDepartmentsAsync();
}
bool ShouldExpand(object data)
{
var dept = data as Department;
return dept == null ? false : dept.Departments.Any();
}
Department draggedItem;
void ItemRender(TreeItemRenderEventArgs args)
{
var department = (Department)args.Value;
// Allow drag of all items except the root item.
if (department.ParentDepartmentId > 0)
{
args.Attributes.Add("title", "Drag item to reorder");
args.Attributes.Add("style", "cursor:grab");
args.Attributes.Add("draggable", "true");
args.Attributes.Add("ondragstart", EventCallback.Factory.Create<DragEventArgs>(this, () =>
{
if (draggedItem == null)
{
draggedItem = department;
}
}));
}
// Allow drop over any item including the root item.
args.Attributes.Add("ondragover", "event.preventDefault()");
args.Attributes.Add("ondrop", EventCallback.Factory.Create<DragEventArgs>(this, () =>
{
if (draggedItem != null && draggedItem.ParentDepartmentId != department.Id)
{
draggedItem.ParentDepartmentId = department.Id;
draggedItem = null;
}
}));
}
}