Передайте сложный тип с typeparam дочернему RenderFragment как CascadeParameter - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть компонент 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», оно будет работать нормально.

Кто-нибудь знает, чего мне не хватает, или если это вообще возможноделать?

...