Лучший способ получить список дочерних компонентов в Blazor - PullRequest
0 голосов
/ 28 мая 2020

Нам нужно получить список дочерних компонентов в OnAfterRenderAsync методе родительского компонента, но мы не знаем, как это сделать. Мы пробуем использовать RenderBuilder и GetFrames, но это всегда null. У нас есть компонент Splitter с N разделенными областями в качестве дочерних компонентов, и нам нужно получить все области в родительском компоненте методом OnAfterRenderAsync.

1 Ответ

3 голосов
/ 28 мая 2020

Если у вас есть родительский компонент типа X и вы хотите ссылаться на все тесно связанные дочерние элементы типа Y (например, TabControl и TabPages), вы можете это сделать.

1: В родительском элементе добавьте обертку вокруг вашего @ChildContent, чтобы добавить каскадное значение, указывающее на себя.

<CascadingValue Value=@this>
  @ChildContent
</CascadingValue>

2: у ваших детей вы можете использовать это значение через CascadingParameter

@code
{
  [CascadingParameter]
  public YourParentComponent ParentComponent { get; set; }
}

3. Затем ваши дети могут уведомить своих родителей о своем существовании.

protected override void OnInitialized()
{
    if (ParentComponent == null)
      throw .............("Must be used within MyParentComponent");
    MyParentComponent.AddChild(this);
}

Если ваши дочерние компоненты визуализируются условно, попросите их реализовать IDisposable, чтобы они могли уведомить родителя об удалении их из своего списка.

В университете Блазор есть пример, показывающий, как создать TabControl - https://blazor-university.com/templating-components-with-renderfragements/creating-a-tabcontrol/

...