fin*_*s10 5 c# asp.net-core blazor blazor-client-side blazor-webassembly
我正在我的项目中构建通用表模板blazor webassembly。按照文档,我设置了表模板,并尝试在表模板中启用虚拟化,如下所示。
表模板.razor:
@typeparam TItem
<table class="@CssClass">
<thead>
<tr>@TableHeader</tr>
</thead>
<tbody>
@if (Virtualize)
{
<Virtualize Context="item" Items="Items">
<ItemContent>
<tr>@RowTemplate(item)</tr>
</ItemContent>
<Placeholder>
<p>Loading..</p>
</Placeholder>
</Virtualize>
}
else
{
@foreach (var item in Items)
{
<tr>@RowTemplate(item)</tr>
}
}
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
TableTemplate.razor.cs:
public partial class TableTemplate<TItem>
{
[Parameter]
public string CssClass { get; set; }
[Parameter]
public bool Virtualize { get; set; }
[Parameter]
public RenderFragment TableHeader { get; set; }
[Parameter]
public RenderFragment<TItem> RowTemplate { get; set; }
[Parameter]
public IReadOnlyList<TItem> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误,
无法从用法中推断出方法“TypeInference.CreateVirtualize_0(RenderTreeBuilder, int, int, ICollection, int, RenderFragment, int, RenderFragment)”的类型参数。
TItem如何在 Virtualize 组件中指定类型?请协助。
TItem是一个泛型类型,所以你需要将它交给组件virtualize(也是一个泛型类型),如下所示:
@typeparam TItem
<table class="@CssClass">
<thead>
<tr>@TableHeader</tr>
</thead>
<tbody>
@if (Virtualize)
{
<Virtualize Context="item" Items="Items" TItem="TItem">
<ItemContent>
<tr>@RowTemplate(item)</tr>
</ItemContent>
<Placeholder>
<p>Loading..</p>
</Placeholder>
</Virtualize>
}
else
{
@foreach (var item in Items)
{
<tr>@RowTemplate(item)</tr>
}
}
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
此外,您的项目也不能是public IReadOnlyList<TItem> Items { get; set; }这样,因为您会得到一个例外,即它无法将其转换为ICollection<TItem>
所以这部分应该是:
[Parameter]
public ICollection<TItem> Items { get; set; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3519 次 |
| 最近记录: |