gpt4 book ai didi

blazor - 在自定义基组件类中动态创建 CascadingValue

转载 作者:行者123 更新时间:2023-12-03 08:36:31 24 4
gpt4 key购买 nike

我正在使用一个自定义基组件类,每个自定义页面都继承自该类。

我没有任何 razor 代码,因为它不会在我的基本组件类中进行模板化 - 它只应该包含一些基本逻辑和初始化内容。

现在我想要环绕一个级联值,因为在任何嵌套在任何子级别中的组件/页面上都应该可以访问我的基类的属性值。我该怎么做,我试图在基本组件上伪造一些 childContent 但我没有工作

public class BaseComponent : ComponentBase
{
[Parameter] public RenderFragement ChildContent {get;set;}
protected override void OnInitialized()
{
ChildContent = b =>
{
b.OpenComponent<CascadingValue<IBvdDataComponent>>(0);
b.AddAttribute(1, "Name", "DataComponent");
b.AddAttribute(2, "Value", this);
b.CloseComponent();
};

}
}


My page component:

@page "/anypage"
@inherits BaseComponent

<div>
<MyNestedComponent />
</div>

在 MyNestedComponent 中我想做:

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

执行此操作的正确方法是什么。

最佳答案

我遇到了类似的情况,我需要在基本组件类中创建一个 CascadingValue ,因为我想要引用父级并允许自定义 HTML 标签,这是我能够弄清楚如何实现的唯一方法这是为了手动构建组件树,但我没有在 Base 构造函数中使用 Reflection,而是使用 BuildRenderTree(RenderTreeBuilder builder) 方法。

public class Panel : ComponentBase
{
[CascadingParameter]
public Panel ParentPanel { get; set; }

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

[Parameter]
public string Tag { get; set; } = "div";

protected override void BuildRenderTree(RenderTreeBuilder builder)
{
base.BuildRenderTree(builder);

// Add the panel element
builder.OpenElement(0, Tag);

// Add the CascadingValue component
builder.OpenComponent<CascadingValue<Panel>>(1);
builder.AddAttribute(2, "Value", this);

// Need to add the ChildContent attribute first then add the actual ChildContent component
// using a callback
builder.AddAttribute(3, "ChildContent", (RenderFragment)((builder2) => {
builder2.AddContent(4, ChildContent);
}));

builder.CloseComponent(); // Close the CascadingValue
builder.CloseElement(); // Close the Tag element
}
}

关于blazor - 在自定义基组件类中动态创建 CascadingValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63743386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com