我有一个将回调作为参数的组件。如果某个条件为真,我只想将回调传递给它。我可以传递给它什么会使 Callback.HasDelegate
失败查看
就像是
<EntityActionMenu DeleteCallback="@(Item.Id == 0 ? null : EventCallback.Factory.Create(this, Delete))"></EntityActionMenu>
或者
<EntityActionMenu SaveCallback="@Save" DeleteCallback="@(Item.Id == 0 ? EventCallback.Factory.Create(this, Task<null>) : EventCallback.Factory.Create(this, Delete))" ></EntityActionMenu>
编辑
这是接收组件
@if (DeleteCallback.HasDelegate)
{
<MatButton Raised="true" OnClick="@(() => DeleteCallback.InvokeAsync(""))" Class="warn">Delete</MatButton>
}
@code {
[Parameter] public EventCallback DeleteCallback { get; set; }
protected override void OnInitialized()
{
System.Diagnostics.Debug.WriteLine(DeleteCallback.HasDelegate);
}
protected override void OnParametersSet()
{
System.Diagnostics.Debug.WriteLine(DeleteCallback.HasDelegate);
}
}
最佳答案
如果你想使用 HasDelegate
要确定是否显示按钮,则必须创建 EventCallback
与 null
代表。如果您使用 EventCallback.Empty
HasDelegate
将返回真。
我认为这样的事情会奏效。
<EntityActionMenu SaveCallback="Save"
DeleteCallback="@(item.ID == 0 ? new EventCallback(null, null) :
EventCallback.Factory.Create(this, Delete))" />
作为替代方案,您可以更改组件以检查
DeleteCallback
为 null 而不是使用 HasDelegate
.例如@if (DeleteCallback is null)
{
<MatButton Raised="true" OnClick="@(() => DeleteCallback.InvokeAsync(""))" Class="warn">Delete</MatButton>
}
这可能会让你更容易。
关于c# - 传递空回调 Blazor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59941288/