简体   繁体   English

Telerik Blazor TreeList SelectedItemsChanged 异步

[英]Telerik Blazor TreeList SelectedItemsChanged async

I have this example code: https://blazorrepl.telerik.com/Qwumvklf39dvgfer21我有这个示例代码: https://blazorrepl.telerik.com/Qwumvklf39dvgfer21

In the TreeList:在树列表中:

<TelerikTreeList Data="@Data"
                 IdField="EmployeeId"
                 ParentIdField="ReportsTo"
                 Pageable="false"
                 SelectionMode="@SelectionMode"
                 SelectedItems="@SelectedItems"
                 SelectedItemsChanged="@(async (IEnumerable<EmployeeDirectoryDto> itemsList) => await HandleSelectionChange(itemsList))"
                 Height="300px">
    <TreeListColumns>
        <TreeListCheckboxColumn SelectAll="@ShowSelectAll" SelectChildren="true"></TreeListCheckboxColumn>
        <TreeListColumn Field="FirstName" Title="First Name" Width="350px" Expandable="true"></TreeListColumn>
        <TreeListColumn Field="LastName" Title="Last Name"></TreeListColumn>
        <TreeListColumn Field="HireDate" Title="Hire Date" Width="200px"></TreeListColumn>
    </TreeListColumns>
</TelerikTreeList>

And handler:和处理程序:

    private async Task HandleSelectionChange(IEnumerable<EmployeeDirectoryDto> selectedFilters)
    {
        await Task.Delay(2000);//Simulate http call
        SelectedItems = selectedFilters.AsEnumerable<EmployeeDirectoryDto>();
    }

Scenario: Select checkbox to select all items.场景:Select复选框到select所有项目。 Result: Items get selected internally, but UI is still showing no items selected.结果:在内部选择了项目,但 UI 仍显示未选择任何项目。

If async/await is removed then it works as expected and all items get selected.如果 async/await 被删除,那么它会按预期工作并且所有项目都被选中。 I added a Task.Delay just to simulate some long running http call happening on every selection change.我添加了一个 Task.Delay 只是为了模拟每次选择更改时发生的一些长时间运行的 http 调用。

What am I missing here?我在这里错过了什么?

It doesn't work asynchronously, though I think they are adding an OnRowClick event that will work aysnc in 3.1.它不能异步工作,但我认为他们正在添加一个 OnRowClick 事件,该事件将在 3.1 中运行 aysnc。

In the meantime, you need to do this:同时,您需要执行以下操作:

private void HandleSelectionChange(IEnumerable<EmployeeDirectoryDto> selectedFilters)
{
    InvokeAsync(() => Task.Delay(2000));//Simulate http call
    SelectedItems = selectedFilters.AsEnumerable<EmployeeDirectoryDto>();
} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM