Как условно добавить шаблон компонента Blazor?

Я использую сторонний компонент blazor, который получает шаблон, но я делаю оболочку для этого компонента, которая также будет иметь свойство шаблона.

Если кто-то использует мою оболочку с шаблоном, он должен передать шаблон, но если нет, он должен использовать шаблон компонента по умолчанию.

Я пробовал добавить if, но это не работает

@if (ItemTemplate != null)
    <ItemTemplate Context="Data">
            @ItemTemplate(Data)        
    </ItemTemplate>
}

Это дает мне ошибку

Нераспознанный дочерний контент внутри компонента TelerikDropDownList. Компонент TelerikDropDownList принимает дочерний контент через следующие элементы верхнего уровня: ValueTemplate, HeaderTemplate, FooterTemplate, ItemTemplate.

Но если я добавлю его внутри ItemTemplate

<ItemTemplate Context="Data">
    @if (ItemTemplate != null)
    {
        @ItemTemplate(Data)
    }
</ItemTemplate>

Он ничего не отобразит, потому что содержимое шаблона пустое.

Как я могу добавить ItemTemplate условно или используйте значение компонентов по умолчанию ItemTemplate?

Наблюдение: я использую Telerik, но этот вопрос должен быть общим для любого компонента с шаблонами.

1 ответ

Рассмотрите возможность переноса проверки из объявления компонента. Вот пример. Предположим, у вас есть два компонента:InnerComponent а также WrapperComponent. Ваш код в WrapperComponent должен выглядеть так:

@if(CustomTemplate == null)
{
   <InnerComponent />
}
else
{
    <InnerComponent>
        <ItemTemplate>@ItemTemplate</ItemTemplate>
    </InnerComponent>
}
Другие вопросы по тегам