Blazor-无法从“方法组”转换为“ EventCallback”

时间:2020-10-11 20:59:19

标签: components blazor blazor-server-side

我在基本的blazor项目上遇到问题。我有一个父组件和一个子组件,其中有一个事件回调,我希望它传递回T类型。我遇到的问题是我在将MethodGroup转换为EventCallback时出错。如果我将此转换为使用Action,那么它可以工作,但是我不能异步完成,这不是理想的选择。有什么想法我做错了吗?

父母

<Child
DeleteCallback="@OnDelete"></Child>

public async Task OnDelete(T item)
{
}

孩子

@typeparam T

[Parameter]
public EventCallback<T> DeleteCallback { get; set; }

 <a @onclick="() => DeleteCallback.InvokeAsync(item)"></a>

我在此处添加了一个解释该问题的仓库。查看Blazor的问题,该问题应该在2019年得到解决。https://github.com/scott-david-walker/EventCallbackError

7 个答案:

答案 0 :(得分:6)

您已经接近:

<ChildComponent Item="someModel" T="SomeModel" DeleteCallback="OnDeleteSomeModel" />

@code {
    SomeModel someModel = new SomeModel();

    void OnDeleteSomeModel(SomeModel someModel)
    {
        ...
    }
}

EventCallback使用通用类型,如果不将类型传递给组件,blazor将无法推断出它。

这意味着,如果您有EventCallback<T>,则需要将T的值传递给组件,例如T="SomeType"

答案 1 :(得分:3)

我遇到过语法正确但仍然出现此错误的情况。

重新启动 Visual Studio 2019 为我解决了这个问题。清洁和重建还不够。

答案 2 :(得分:1)

以下语法对我有用:

// in the component (C#):
[Parameter]
public EventCallback<MovingEventArgs> OnMoving { get; set; }

// on the using side (Razor):
OnMoving="(Component.MovingEventArgs o) => OnMoving(o)"

// on the using side (C#):
protected void OnMoving( Component.MovingEventArgs e ) {
}

似乎有所更改,并且文档不是最新的。 此事件也使用自定义事件参数。

答案 3 :(得分:1)

出于某种原因,Visual Studio 保留了我以前使用过的签名。清洁、重新启动、清空 bin/obj 文件夹等不起作用。我不得不重命名方法,这对我有用。

答案 4 :(得分:0)

我遇到了同样的问题,我的代码没有任何问题,只是关闭了VS,然后重新打开了,而vuala!我很惊讶这件事确实发生了好几次...对MS来说非常糟糕!

答案 5 :(得分:0)

就我而言,我声明了一个可为空的 EventCallback? - 你不能那样做。

答案 6 :(得分:0)

就我而言,当我手动定义 @typeparam(不是通过推理)(TItem="int")时,问题解决了。

<MyComponent TItem="int" OnChange="Component_Changed" />