我在基本的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
答案 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" />