【发布时间】:2020-01-28 17:07:24
【问题描述】:
我有一个带有 RenderFragment 参数“TableHeader”的 Blazor 组件“Table”,其中包含 TableHeaderColumn 元素的集合。这是 Table 组件的一个示例用法:
<Table Items="@Persons">
<TableHeader>
<TableHeaderColumn Label="First Name" />
<TableHeaderColumn Label="Last Name" />
</TableHeader>
<TableRow>
......
</TableRow>
</Table>
使用CascadingValue,我想将Table 实例传递给“TableHeader”渲染片段中的所有TableHeaderColumn 实例,但由于某种原因我无法让它工作。
我的理论是,只要 Table 组件使用 TItem typeparam,这是不可能的,而 TableHeaderColumn 组件不是。
这是 Table.razor 文件:
@typeparam TItem
@inherits TableBase<TItem>
<table>
<thead>
<tr>
<CascadingValue Value="this">
@TableHeader
</CascadingValue>
</tr>
</thead>
<tbody>
....
</tbody>
</table>
TableBase.cs:
public class TableBase<TItem>
{
[Parameter]
public RenderFragment TableHeader { get; set; }
[Parameter]
public RenderFragment<TItem> TableRow { get; set; }
}
public class TableHeaderColumnBase
{
[CascadingParameter]
public Table<object> Table { get; set; }
}
如您所见,由于TableHeaderColumn 组件没有使用typeparam,因此我使用“对象”作为表类型。不确定这是否是正确的方法。
TableHeaderColumnBase 中的级联参数未填充,我不确定如何使其工作。
如果我改为传递 Table-instance 上的属性之一,例如“this.Title”,它可以正常工作。
任何人都知道我错过了什么,或者这是否可能做到?
【问题讨论】:
标签: c# .net blazor blazor-server-side