在 Blazor 中使用模板化组件时,真的很难弄清楚如何引用我的网格上下文
我有一个网格组件,它包含一个 ExpandoObjects 列表
ReportGridComponent.razor
@typeparam TData
<div class="w-100">
@if (Data == null)
{
}
else
{
<DxDataGrid Data="Data"
ShowPager="true"
ShowDetailRow="true"
HorizontalScrollBarMode="ScrollBarMode.Auto"
PagerNavigationMode=@PagerNavigationMode.NumericButtons
PagerPageSizeSelectorVisible="true"
PagerAllDataRowsItemVisible="true">
<Columns>
@ColumnCollection
</Columns>
<TotalSummary>
@if (SummaryCollection != null)
{
@SummaryCollection
}
</TotalSummary>
<DetailRowTemplate>
@DetailTemplate
</DetailRowTemplate>
</DxDataGrid>
}
</div>
@code {
[Parameter] public IEnumerable<TData> Data { get; set; }
[Parameter] public RenderFragment ColumnCollection { get; set; }
[Parameter] public RenderFragment SummaryCollection { get; set; }
[Parameter] public RenderFragment DetailTemplate { get; set; }
}
在使用此网格的我的剃须刀主页面中,我想设置主-详细信息,因此我尝试像这样添加我的详细信息网格:
ReportPage.razor
<ReportGridComponent Data="@reportResults">
<ColumnCollection>
***RENDER COLUMNS IN THIS AREA***
</ColumnCollection>
<DetailTemplate>
<div class="p-3">
<DxDataGrid DataAsync="@GetDetailItems(NEED CONTEXT ITEM HERE)"
SelectionMode="DataGridSelectionMode.None"
PageSize="5">
***RENDER COLUMNS IN THIS AREA****
</DxDataGrid>
</div>
</DetailTemplate>
</ReportGridComponent>
它调用一个事件来提取详细信息:
ReportPage.razor
protected Func<CancellationToken, Task<IEnumerable<dynamic>>> GetDetailItems(dynamic item)
{
return GetDetailsAsync;
async Task<IEnumerable<dynamic>> GetDetailsAsync(CancellationToken cancellationToken)
{
return detail info here...
}
}
我的问题是我无法弄清楚如何访问详细信息行模板的上下文,我可以在组件中添加上下文,但无法在我的剃须刀页面中访问它。处理这种情况的正确方法是什么?我尝试了各种将不同的对象传递到渲染片段中,但一直遇到实际获取“上下文”属性的行位于组件中而不是组件外部(DetailRowTemplate)的问题。我也不能只在 razor 页面上的组件内声明 DetailRowTemplate 块,因为它未被识别为组件的子内容。
谢谢