虽然事件绑定的正常方式是通过在标记中使用属性,但我想自动事件绑定。当组件有大量实例时,这将非常有用。在我的例子中,我希望总是以同样的方式调用OnClick中的CascadingParameter组件。
像这样:
public class PrositThBase : ComponentBase
{
[Parameter]
public RenderFragment ChildContent { get; set; }
protected override async Task OnInitializedAsync()
{
OnClick += OnClick;
base.OnInitializedAsync();
}
public void OnClick()
{
}
}
但这不起作用。有什么办法可以做到这一点吗?
我不确定我是否理解了你的问题,但我会尽量回答…
你可以使用"ParameterAttribute"在运行时设置一个按钮绑定(以及其他东西)。
我这样使用它:
//base class from which all child elements inherit
public class SomeBaseClass : BaseComponent
{
public virtual void AddToParent(object child)
{
}
}
//ParentComponent.razor
<ChildComponent Parent="this" @ref="child" />
@code {
SomeBaseClass child;
public override void AddToParent(object child)
{
child = (SomeBaseClass)child;
child.SetSomeButtonClick(EventCallback.Factory.Create(this, DoSomething));
}
void DoSomething()
[
//gets executed
]
}
//ChildComponent.razor
@inherits SomeBaseClass
[Parameter]
public EventCallback SomeButtonClickEvent { get; set; }
public void SetSomeButtonClickEvent(EventCallback callback)
{
SomeButtonClickEvent = callback;
StateHasChanged();
}
[ParameterAttribute]
public ParentComponent Parent {get;set;}
@code {
protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
if (Parent != null)
{
Parent.AddToParent(this);
}
}
base.OnAfterRender(firstRender);
}
}
使用这个方法,你的父组件可以呈现多个子元素,并自动绑定子元素的事件。
我希望它能满足你的需要。