У меня есть компонент Blazor «Таблица» с параметром RenderFragment
«TableHeader», содержащий коллекцию элементов TableHeaderColumn
.Это пример использования компонента Table:
<Table Items="@Persons">
<TableHeader>
<TableHeaderColumn Label="First Name" />
<TableHeaderColumn Label="Last Name" />
</TableHeader>
<TableRow>
......
</TableRow>
</Table>
Используя CascadingValue
, я хочу передать экземпляр Table всем экземплярам TableHeaderColumn
во фрагменте рендеринга "TableHeader", но я не могу получить этоработать по какой-то причине.
Моя теория заключается в том, что это невозможно, если компонент таблицы использует TItem typeparam
, а компонент TableHeaderColumn
- нет.
Это таблица.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
не заполняется, и я не уверен, как заставить это работать.
Если вместо этого я передам одно из свойств экземпляра таблицы, например «this.Title», оно будет работать нормально.
Кто-нибудь знает, чего мне не хватает, или если это вообще возможноделать?