在 Blazor 中获取子组件列表的最佳方法

Kri*_*nac 1 .net c# asp.net-core blazor

我们需要在OnAfterRenderAsync父组件的方法中获取子组件的列表,但是我们不知道该怎么做。我们尝试使用RenderBuilderandGetFrames但这始终为空。我们有带有 N 个分割区域的 Splitter 组件作为子组件,我们需要在OnAfterRenderAsync方法中获取父组件中的所有区域。

Pet*_*ris 7

如果您有一个 X 类型的父组件,并且想要引用所有紧耦合的 Y 类型的子组件(例如,TabControl 和 TabPages),那么您可以这样做。

1:在 Parent 中,在您周围添加一个包装器,@ChildContent以添加一个指向自身的级联值。

<CascadingValue Value=@this>
  @ChildContent
</CascadingValue>
Run Code Online (Sandbox Code Playgroud)

2:在您的孩子中,您可以通过 CascadingParameter

@code
{
  [CascadingParameter]
  public YourParentComponent ParentComponent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

3:然后你的孩子可以通知他们的父母他们的存在

protected override void OnInitialized()
{
    if (ParentComponent == null)
      throw .............("Must be used within MyParentComponent");
    MyParentComponent.AddChild(this);
}
Run Code Online (Sandbox Code Playgroud)

如果您的子组件是有条件地呈现,则让它们实现 IDisposable,以便它们可以通知父组件将它们从其列表中删除。

Blazor 大学有一个示例,展示了如何创建 TabControl - https://blazor-university.com/templating-components-with-renderfragements/creating-a-tabcontrol/