我想按照microsoft documentation中的示例创建一个模板化的表组件.

在这里,我想向表中添加一个排序函数:

// This is a function in the code-behind of TableTemplate.razor
public void SortSourceList(/*some args*/)
{
    // sort based on given args
}

问题如下.我希望这个功能可以从子元素们那里访问,例如TableHeader个项目:

 @page "/somepage
 <TableTemplate Items="pets" Context="pet">
    <TableHeader>
        <th>
             <button class="btn btn-outline-secondary mr-2" 
                 @onclick=<!--call the sorting function from here-->>
        </th>
    </TableHeader>
    <RowTemplate>
        ...
    </RowTemplate>
</TableTemplate>
@code{ // page related code - don't want to handle anything concerning the table here }

我知道这可以通过将TableTemplate的实例作为CascadingParameter传递来实现,但是如何在一个普通的html项目中获得它,它不是razor组件?此外,我不一定要将TableTemplate实例作为类属性添加到任何子组件中(据我所知,访问级联参数需要TableTemplate实例),所以我想知道是否可以直接传递函数或事件?

推荐答案

还有一种简单直接的方法,就是将TableHeader也键入.

TableTemplate.razor年的变化

  <thead>
    <tr>@TableHeader(this)</tr>
  </thead>

@code {
[Parameter]
public RenderFragment<TableTemplate<TItem>>? TableHeader { get; set; }

然后像这样使用它

<TableTemplate Items="pets" >
  <TableHeader Context="table">

       <button @onclick="() => table.SortSourceList(/* args */)" />

  </TableHeader>

  <RowTemplate Context="pet">
     ...
  </RowTemplate>
</TableTemplate>

Csharp相关问答推荐

如何使用C#中的图形API更新用户配置文件图像

向类注入一个工厂来创建一些资源是一个好的实践吗?

将委托传递到serviceccollection c#web API

Microsoft. VisualBasic. FileIO. FileSystem. MoveFile()对话框有错误?

`Task`只有在C#中等待时才会运行吗?

不仅仅是一个简单的自定义按钮

. net依赖注入如何避免服务类中的新

Int和uint相乘得到LONG?

Rider将.NET安装在哪里

如何使用EF Core和.NET 8来upsert到具有多对多关系的表?

Blazor Web App WASM的两个独立项目令人困惑

正确处理嵌套的本机集合

JsonSchema.Net删除假阳性判断结果

如何让两个.NET版本不兼容的项目对话?

如何使用EPPlus C#在单个单元格中可视化显示多行文字

未显示详细信息的弹出对话框

C#USB条形码 scanner 在第二次扫描时未写入行尾字符

Xamarin.Forms中具有类似AspectFill的图像zoom 的水平滚动视图

ASP.NET核心MVC|如何在控制器方法之间传递值

如何在C#中反序列化Java持续时间?