传递多个子组件作为参数

时间:2020-06-16 19:31:28

标签: c# blazor blazor-server-side blazor-client-side

因此使用该组件将如下所示:

<ParentListComponent Header="Test">
   <ChildListItemComponent Name="1"/>
   <ChildListItemComponent Name="2"/>
   <ChildListItemComponent Name="3"/>
   <ChildListItemComponent Name="4"/>
</ParentListComponent>

ParentListComponent看起来像这样:

@foreach(var childComponent in listComponents){
    @childComponent
}

@code{

   [Parameter]
   Public List<ChildListItemComponent> listComponents { get; set; }
}

我知道我可以很容易地通过将其传递为ChildContent来呈现它,如下所示,但我真的很想保留列表,以便可以轻松地从父项访问每个​​项目。

[Parameter]
public RenderFragment ChildContent { get; set; }

我觉得我只是在这里缺少语法,但是不幸的是我找不到关于它的信息。如果可以的话,我将不胜感激。

1 个答案:

答案 0 :(得分:7)

您将创建一个ParentComponent和一个ChildComponentParentComponent的标记应具有以下内容

<CascadingValue Value=this>
@ChildContent
</CascadingValue>

@code
{
  [Parameter]
  public RenderFragment ChildContent { get; set; }
}

现在,您的孩子将可以像这样访问父母

[CascadingParameter]
public ParentComponent ParentComponent { get; set; }

OnInitialized方法中,您可以调用ParentComponent.RegisterChild(this);,在IDisposable.Dispose中,您可以调用ParentComponent.UnregisterChild(this);

这是您可以将自己添加到父类中以保留ChildComponent列表的两种方法。

布拉泽大学here上有完整的演练。