我正在构建Blazor ProgressBar演示,并且尝试将一些代码从Blazor组件外部移到C#类(称为ProgressManager)中,以便我可以抽象代码并使ProgressManager成为ProgressBar组件的级联参数。
我知道如何为这样的组件设置一个eventcallback参数:
[Parameter]
public EventCallback<string> UpdateNotification { get; set; }
我不知道该怎么做,是在C#类上设置相同类型的属性。
我的Start方法中包含以下代码:
public void ShowProgressSimulation()
{
// Create a ProgressManager
this.ProgressManager = new ProgressManager();
this.ProgressManager.UpdateNotificaiton = Refresh;
this.ProgressManager.Start();
// Refresh the UI
StateHasChanged();
}
起作用的部分是:
this.ProgressManager.UpdateNotificaiton = Refresh;
错误是:
无法将方法组“刷新”转换为非委托类型“ EventCallback”。您打算调用该方法吗?
我也尝试过:
this.ProgressManager.UpdateNotificaiton += Refresh;
这导致EventCallback无法应用于MethodGroup(措辞)。
谢谢
答案 0 :(得分:3)
事实证明,您可以像这样从C#代码分配事件回调:
this.ProgressManager.UpdateNotification = new EventCallback(this, (Action)Refresh);
void Refresh() {}
它还可以与异步方法一起使用,例如:
this.ProgressManager.UpdateNotification = new EventCallback(this, (Func<ValueTask>)RefreshAsync);
ValueTask RefreshAsync() {}
更新
您还可以使用EventCallbackFactory来更方便地创建事件回调对象,例如:
new EventCallbackFactory().Create(this, Refresh)
答案 1 :(得分:0)
您还可以使用以下代码通过工厂创建EventCallBack
,而不必重新创建EventCallbackFactory
Button.Clicked = EventCallback.Factory.Create( this, ClickHandler );