Ребенок подписывается на родительские события

В Blazor просто подписать родительский элемент управления на дочерние события: в дочернем я просто объявляю

[Параметр] Func OnClick {get; установленный; }

и назначьте родительский метод OnClick в разметке дочернего элемента управления. Однако как я могу добиться обратного? Я хочу, чтобы ребенок реагировал на события родительского элемента управления. Пока я просто вызываю дочерние методы от родителя - есть ли лучший подход?


person Vitaly    schedule 20.05.2019    source источник


Ответы (1)


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

На родительском компоненте

Определите обработчик событий, скажем, StateChanged

public event EventHandler StateChanged;

Вызвать событие из кода на родительском элементе

StateChanged?.Invoke(this, EventArgs.Empty); 

На дочернем компоненте

// Subscribe to the event defined on the parent component
protected async override Task OnInitAsync()
        {
            ParentComponent.StateChanged += OnStateChanged;
}

// Dispose of the component
        void IDisposable.Dispose()
        {
            ParentComponent.StateChanged -= OnStateChanged;
        }

        void OnStateChanged(object sender, EventArgs e) => Call_A_Method_That_Do_Something();

Надеюсь это поможет...

person enet    schedule 20.05.2019
comment
при этом не требуется, чтобы событие родительского элемента было статическим? в противном случае вам понадобится ссылка на родительский компонент в дочернем элементе, что может быть сложно. также не являются ли статические события ужасной идеей? - person Ben; 21.05.2020