我有一个Blazor组件“ Table”,它带有一个RenderFragment
参数“ TableHeader”,其中包含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实例上的属性之一,例如“ this.Title”,则效果很好。
有人知道我在想什么,或者甚至可以做到吗?
答案 0 :(得分:0)
您需要将TItem元素传递给TableHeaderColumnBase组件
<Table Items="@Persons">
<TableHeader>
<TableHeaderColumn TItem="Person" Label="First Name" />
<TableHeaderColumn TItem="Person" Label="Last Name" />
</TableHeader>
<TableRow>
......
</TableRow>
在TableHeaderColumn.razor文件中,添加一个参数
[CascadingParameter] public Table<TItem> ParentTable { get; set; }
和@typeparam TItem
在顶部。
您现在可以调用所有方法并访问父组件的变量,并根据需要使用TItem。