【问题标题】:Blazor: How to create reusable render fragment?Blazor:如何创建可重用的渲染片段?
【发布时间】:2021-02-09 19:55:43
【问题描述】:

我经常使用以下标记:

<SfDropDownList DataSource="@Model.Customers" TItem="Customer" TValue="Customer">
    <DropDownListTemplates TItem="Customer">
        <ItemTemplate Context="customer">
            <span>@customer.Name</span><span class="float-right">@customer.Site</span>
        </ItemTemplate>
    </DropDownListTemplates>
</SfDropDownList>

如何在多个组件中重复使用具有相同参数的 DropDownListTemplate?

我在想,我创建一个继承自 DropDownListTemplates 的自定义类:

@inherits DropDownListTemplates<Customer>
@code { 
    override void OnAfterRender(bool firstRender)
    {
        // this.ItemTemplate = ??
        base.OnAfterRender(firstRender);
    }
}

但是如何设置基类中的 RenderFragment 参数 ItemTemplate?

我想避免将 SfDropDownList 包装到自定义组件中

【问题讨论】:

    标签: blazor


    【解决方案1】:

    您可以为 RenderFragment 参数设置默认值,如下所示。

    @ChildContent
    
    @code {
        [Parameter] public RenderFragment ChildContent {get; set;} = @<p>Some text here</p>;
    }
    

    来源:blazor-university.com


    编辑添加:您还可以在代码中定义可重用的RenderFragment

    public static RenderFragment SayHello = __builder =>
    {
        <h1>Hello!</h1>
    };
    

    RenderFragment 委托也可以接受参数。

    <div class="chat">
        @foreach (var message in messages)
        {
            @DisplayChatMessage(message)
        }
    </div>
    
    @code {
        RenderFragment<ChatMessage> DisplayChatMessage = message => __builder =>
        {
            <div class="chat-message">
                <span class="author">@message.Author</span>
                <span class="text">@message.Text</span>
            </div>
        };
    }
    

    来源:ASP.NET Core Blazor Web Assembly Performance Best Practices

    【讨论】:

      猜你喜欢
      • 2021-07-08
      • 2022-08-10
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 2023-03-30
      • 2019-11-12
      相关资源
      最近更新 更多