C# 获取Blazor中子组件列表的最佳方法
我们需要在父组件的OnAfterRenderAsync方法中获取子组件列表,但我们不知道如何做到这一点。 我们尝试使用RenderBuilder和GetFrames,但这总是空的。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周围添加一个包装器
我们有一个拆分器组件,其中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);
}