передать функцию в качестве параметра динамически созданному компоненту Blazor - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь передать некоторые параметры динамически сгенерированному компоненту

Parent

...
    DynamicComponent = builder =>
        {
            Type moduleType = Type.GetType(ChildComponentName);
            System.Diagnostics.Debug.WriteLine(moduleType);
            if (moduleType != null)
            {
                builder.OpenComponent(0, moduleType);
                builder.AddAttribute(1, "title", "Delete + " + item.Name + "?");
                builder.AddAttribute(2, "content", "Are you sure you want to delete this organization?");
                builder.AddAttribute(3, "YesCallback", whatgoeshere?);
                builder.AddComponentReferenceCapture(1, inst => { child = Convert.ChangeType(inst, moduleType); });
                builder.CloseComponent();
            }
        };

    public void Delete(string msg)
        {
            System.Diagnostics.Debug.WriteLine(msg);
            items.RemoveAt(DeleteIndex);
        }
...

Child

...
    [Parameter] public string Title { get; set; }
    [Parameter] public string Content { get; set; }
    [Parameter] public EventCallback<string> YesCallback { get; set; }
...

Компонент get генерируется и отображается нормально. Первые два параметра установлены нормально. Я не могу понять, как передать родительскую функцию Delete в качестве третьего атрибута, чтобы ребенок мог ее вызвать.

1 Ответ

1 голос
/ 22 января 2020

Вы можете использовать EventCallbackFactory.Create для создания обратных вызовов событий от простых действий. Вместе с действием вы должны передать получатель события, который обычно является компонентом, на котором выполняется действие.

Вы можете получить доступ к фабрике через EventCallback.Factory:

var callback = EventCallback.Factory.Create<string>(this, arg =>
{
    // do something
});

You вместо этого можно также передать метод с правильной подписью:

var callback = EventCallback.Factory.Create<string>(this, OnCallback);

Затем вы можете передать созданный обратный вызов события методу AddAttribute:

builder.OpenComponent(0, componentType);
builder.AddAttribute(1, "OnSomething", callback);
builder.CloseComponent();
...