在Blazor组件之外设置Eventcallback <string>?

时间:2020-01-20 02:07:41

标签: c# blazor

我正在构建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(措辞)。

谢谢

2 个答案:

答案 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 );