Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

368
Vistas
¿Cómo puedo guardar una instancia de Blazor Component en una variable y representarla en mi .cshtml?

Teniendo en cuenta que tengo una clase llamada Tab .

 public class Tab { public Guid Id { get; } public bool IsVisible { get; set; } protected Tab() { Id = Guid.NewGuid(); } }

Quiero acoplar estrictamente estas pestañas a una instancia de Blazor Component y representar esas instancias iterando sobre las pestañas. Quiero tener control sobre cuándo se crea un Componente y cuándo se destruye nuevamente.

Quiero hacer esto porque de esa manera puedo conservar el estado de cada componente.

Aquí está el problema con el enfoque fácil. Teniendo en cuenta algo como esto:

 @code { public void CreateNewTabAndRemoveOldTab() { Tabs.RemoveAt(0); Tabs.Add(new Tab()); } } foreach (var tab in Tabs) { <MyTabComponent/> }

La pestaña recién creada simplemente asumirá el estado de la pestaña eliminada. No se llamará a OnInitialized .

He RenderFragment , pero no parece su propiedad de trabajo. El problema es que Blazor Framework seguirá decidiendo cuándo se crea un nuevo componente (llamando así a OnInitialized ) o cuándo se usa una instancia existente.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si leí esto correctamente, Tab es una clase, no un componente. Debe desacoplar su lista de pestañas del componente que las representa. Su lista de pestañas vive en un servicio, el alcance depende de lo que esté haciendo con ellas. Su componente de pestaña muestra la pestaña actualmente seleccionada en la lista. Si muestra un poco más de su lógica, probablemente pueda mostrarle un ejemplo de trabajo relevante.

over 4 years ago · Santiago Trujillo Denunciar

0

Mira esto

@ref es una referencia a su componente, se agrega a la lista de componentes.

 @implements IDisposable @foreach (var tab in tabs) { <MyTabComponent @ref=@TabRef Tab=@tab /> } @code { List<Tab> tabs = new List<Tab>(); List<MyTabComponent> tabsComp = new List<MyTabComponent>(); MyTabComponent TabRef { set { tabsComp.Add(value); } } public void CreateNewTabAndRemoveOldTab() { tabs.RemoveAt(0); tabs.Add(new Tab()); } public void Dispose() { } }
over 4 years ago · Santiago Trujillo Denunciar

0

MisTabs.razor

 <CascadingValue Value="@this" IsFixed="true"> foreach (var tab in Tabs) { <MyTabComponent/> } </CascadingValue> @code{ private List<MyTabComponent> Tabs; public void Register(MyTabComponent tab) { this.Tabs.Add(tab); } public void UnRegister(MyTabComponent tab) { this.Tabs.Remove(tab); } }

MiTabComponent.razor

 @implements IDisposable <div></div> @code{ [CascadingParameter] protected MyTabs Context { get; set; } protected override void OnInitialized() { Context?.Register(this); // implement your logic here } public void Dispose() { Context?.UnRegister(this); // implement your logic here } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda