Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取Blazor中子组件列表的最佳方法_C#_.net_Asp.net Core_Blazor - Fatal编程技术网

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

C# 获取Blazor中子组件列表的最佳方法,c#,.net,asp.net-core,blazor,C#,.net,Asp.net Core,Blazor,我们需要在父组件的OnAfterRenderAsync方法中获取子组件列表,但我们不知道如何做到这一点。 我们尝试使用RenderBuilder和GetFrames,但这总是空的。 我们有一个拆分器组件,其中N个拆分区域作为子组件,我们需要在OnAfterRenderAsync方法中获取父组件中的所有区域。如果您有一个类型为X的父组件,并且希望引用所有类型为Y的紧耦合子组件,例如TabControl和TabPages,那么您可以这样做 1:在父级中,在@ChildContent周围添加一个包装器

我们需要在父组件的OnAfterRenderAsync方法中获取子组件列表,但我们不知道如何做到这一点。 我们尝试使用RenderBuilder和GetFrames,但这总是空的。
我们有一个拆分器组件,其中N个拆分区域作为子组件,我们需要在OnAfterRenderAsync方法中获取父组件中的所有区域。

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

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

<CascadingValue Value=@this>
  @ChildContent
</CascadingValue>
3:你的孩子可以通知他们的父母他们的存在

protected override void OnInitialized()
{
    if (ParentComponent == null)
      throw .............("Must be used within MyParentComponent");
    MyParentComponent.AddChild(this);
}
如果子组件是有条件呈现的,则让它们实现IDisposable,以便它们可以通知父组件将其从列表中删除


Blazor大学的一个例子展示了如何创建TabControl-

@Kristijan Mihaljinac,我建议您在选择使用CascadingValue之前先阅读一下。在github中搜索涉及CascadingValue使用的问题。下面是一篇文章的链接,在文章的结尾,你可以阅读作者得出的结论。没有人声称这是一种无用的方法,一点也不,它是Blazor的一部分,但是您必须意识到它的局限性,并且它的使用会产生问题。你需要记住的唯一一件事是使用IsFixed=@true来提高速度。就是这样。如果孩子的数量动态变化呢。例如,ChildContent将如下所示:@ifcheckboxValue{}。如何使子项按正确的顺序排列?如果要找到它们的顺序,必须查看生成它们的数据。
protected override void OnInitialized()
{
    if (ParentComponent == null)
      throw .............("Must be used within MyParentComponent");
    MyParentComponent.AddChild(this);
}