【问题标题】:Dynamic type parameter for Blazor componentsBlazor 组件的动态类型参数
【发布时间】:2022-01-01 22:58:51
【问题描述】:

我想为多种数据类型设计一个通用的 radzen 数据网格。这意味着在剃须刀页面上,我有 radzen 数据网格的通用标记。记录集和列定义动态绑定到网格。我的问题是“TItme”。

我需要类似的东西:

TItem="typeof(data.records[0])"

数据网格如下:

<RadzenDataGrid FilterMode="FilterMode.Simple" Data="@data.records" TItem="typeof(data.records[0])" AllowFiltering="@data.allowFiltering" AllowPaging="@data.allowPaging" AllowSorting="@data.allowSorting">       
    <Columns>
        @foreach (var colDef in data.columnDefinitions)
        {
            <RadzenDataGridColumn TItem="typeof(data.records[0])" Property="@colDef.columnProperty" Title="@colDef.columnTitle"  />
        }            
    </Columns>           
</RadzenDataGrid>

【问题讨论】:

  • 请重命名标题,使其更通用,例如“Blazor 组件的动态类型参数”。

标签: blazor radzen


【解决方案1】:

您可能想在 dotnet 6 中尝试动态组件:

<DynamicComponent Type="@componentType" Parameters="@parameters" />

@code {
    private Type componentType = ...;
    private IDictionary<string, object> parameters = ...;
}

文档: https://docs.microsoft.com/en-us/aspnet/core/blazor/components/dynamiccomponent?view=aspnetcore-6.0

其他 dotnet 版本的另一个选择是尝试直接在代码中定义渲染片段(注意带有 ATTENTION 注释的行):

@page "/built-content"

<h1>Build a component</h1>

<div>
    @CustomRender
</div>

<button @onclick="RenderComponent">
    Create three Pet Details components
</button>

@code {
    private RenderFragment? CustomRender { get; set; }

    private RenderFragment CreateComponent() => builder =>
    {
        for (var i = 0; i < 3; i++) 
        {
            builder.OpenComponent(0, typeof(PetDetails));
            builder.AddAttribute(1, "PetDetailsQuote", "Someone's best friend!");
            builder.AddAttribute(2, "TItem", typeof(data.records[0])); // ATTENTION
            builder.CloseComponent();
        }
    };

    private void RenderComponent()
    {
        CustomRender = CreateComponent();
    }
}

文档: https://docs.microsoft.com/en-us/aspnet/core/blazor/advanced-scenarios?view=aspnetcore-3.1

【讨论】:

  • 但是@aleksander_si 我需要对 n 多种类型使用通用数据网格。我无法为每种类型创建单独的网格并动态呈现。
  • 我的回答也能满足你的要求,请再查。
猜你喜欢
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多