MudBlazor - 通用 MudTable
MudBlazor - Generic MudTable
我正在尝试创建我自己的继承自 MudTable 的自定义组件。在我的自定义组件中,我创建了一个具有 TItem 类型的 IEnumerable 属性,然后我从父 class 发送了一个数据源,我还通过参数定义了 TItem 类型。我遇到的问题是 MudTable 使用 @context 从 DataSource 获取值,当您为 DataSource 提供预定义类型时,这些值是已知的。你可以在这里看到 MudTable.
但是,当 DataSource 是泛型类型时,@context 不知道从哪个 属性 中获取值。
包含自定义组件的父组件:
<CETable DataSource="Persons" ItemType="Person"></CETable>
public List<Person> Persons { get; set; }
protected override void OnInitialized()
{
Persons = new List<Person>();
Persons.Add(new Person { AgeOfPerson = "25", Name = "Mike" });
Persons.Add(new Person { AgeOfPerson = "35", Name = "John" });
Persons.Add(new Person { AgeOfPerson = "45", Name = "Michel" });
}
public class Person
{
public string Name { get; set; }
public string AgeOfPerson { get; set; }
}
自定义组件(CETable):
@typeparam ItemType
@inherits MudTable<ItemType>
<MudTable Items="DataSource">
<HeaderContent>
@*I will send later those columns as a parameter*@
<MudTh>Name</MudTh>
<MudTh>AgeOfPerson</MudTh>
</HeaderContent>
<RowTemplate>
<MudTd DataLabel="Name">@context.</MudTd> // How To define the context here ?
<MudTd DataLabel="AgeOfPerson">@context.</MudTd> // How To define the context here ?
</RowTemplate>
</MudTable>
@code{
[Parameter]
public IEnumerable<ItemType> DataSource { get; set; }
}
感谢您的帮助。
我找到了解决办法。我将 post 放在这里以备不时之需。基本上,我正在创建一个渲染片段,它从父组件获取内容并在子组件中设置值。
包含自定义组件的父组件:
<CETable DataSource="Persons" ItemType="Person">
<CEHeaderTemplate>
<CETh>Name</CETh>
<CETh>AgeOfPerson</CETh>
</CEHeaderTemplate>
<CERowTemplate>
<CETd DataLabel="Name">@context.Name</CETd>
<CETd DataLabel="AgeOfPerson">@context.AgeOfPerson</CETd>
</CERowTemplate></CETable>
自定义组件(CETable):
@typeparam ItemType
@inherits MudTable<ItemType>
<MudTable Items="DataSource">
<HeaderContent>
@CEHeaderTemplate
</HeaderContent>
<RowTemplate>
@CERowTemplate(@context)
</RowTemplate></MudTable>
@code{
[Parameter]
public IEnumerable<ItemType> DataSource { get; set; }
[Parameter]
public RenderFragment<ItemType> CERowTemplate { get; set; }
[Parameter]
public RenderFragment CEHeaderTemplate { get; set; }
}
我正在尝试创建我自己的继承自 MudTable 的自定义组件。在我的自定义组件中,我创建了一个具有 TItem 类型的 IEnumerable 属性,然后我从父 class 发送了一个数据源,我还通过参数定义了 TItem 类型。我遇到的问题是 MudTable 使用 @context 从 DataSource 获取值,当您为 DataSource 提供预定义类型时,这些值是已知的。你可以在这里看到 MudTable.
但是,当 DataSource 是泛型类型时,@context 不知道从哪个 属性 中获取值。
包含自定义组件的父组件:
<CETable DataSource="Persons" ItemType="Person"></CETable>
public List<Person> Persons { get; set; }
protected override void OnInitialized()
{
Persons = new List<Person>();
Persons.Add(new Person { AgeOfPerson = "25", Name = "Mike" });
Persons.Add(new Person { AgeOfPerson = "35", Name = "John" });
Persons.Add(new Person { AgeOfPerson = "45", Name = "Michel" });
}
public class Person
{
public string Name { get; set; }
public string AgeOfPerson { get; set; }
}
自定义组件(CETable):
@typeparam ItemType
@inherits MudTable<ItemType>
<MudTable Items="DataSource">
<HeaderContent>
@*I will send later those columns as a parameter*@
<MudTh>Name</MudTh>
<MudTh>AgeOfPerson</MudTh>
</HeaderContent>
<RowTemplate>
<MudTd DataLabel="Name">@context.</MudTd> // How To define the context here ?
<MudTd DataLabel="AgeOfPerson">@context.</MudTd> // How To define the context here ?
</RowTemplate>
</MudTable>
@code{
[Parameter]
public IEnumerable<ItemType> DataSource { get; set; }
}
感谢您的帮助。
我找到了解决办法。我将 post 放在这里以备不时之需。基本上,我正在创建一个渲染片段,它从父组件获取内容并在子组件中设置值。
包含自定义组件的父组件:
<CETable DataSource="Persons" ItemType="Person">
<CEHeaderTemplate>
<CETh>Name</CETh>
<CETh>AgeOfPerson</CETh>
</CEHeaderTemplate>
<CERowTemplate>
<CETd DataLabel="Name">@context.Name</CETd>
<CETd DataLabel="AgeOfPerson">@context.AgeOfPerson</CETd>
</CERowTemplate></CETable>
自定义组件(CETable):
@typeparam ItemType
@inherits MudTable<ItemType>
<MudTable Items="DataSource">
<HeaderContent>
@CEHeaderTemplate
</HeaderContent>
<RowTemplate>
@CERowTemplate(@context)
</RowTemplate></MudTable>
@code{
[Parameter]
public IEnumerable<ItemType> DataSource { get; set; }
[Parameter]
public RenderFragment<ItemType> CERowTemplate { get; set; }
[Parameter]
public RenderFragment CEHeaderTemplate { get; set; }
}