es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Enlazar IEnumerable de interfaces a un control personalizado de WPF.

Tengo un public IEnumerable<ISlot> enumSlots; que se declara en mi MainWindow y se llena con valores:

public MainWindow()
{
   InitializeComponent();

   enumSlots = GetSlots();
   this.DataContext = this;
}

La interfaz ISlot es la siguiente:


public interface ISlot
{
int Number { get; }
string Name { get; }
}

Tengo un control personalizado:


<Style Selector="controls|CustomControlSlot">
<Setter Property="Template">
<ControlTemplate>
<StackPanel Orientation="Vertical">
<Label x:Name="labelNumber" Content="Number"/>
<Label x:Name="labelName" Content="Name"/>
</StackPanel>
</ControlTemplate>
</Setter>
</Style>
</Styles>

Mi objetivo es que para cada elemento en el IEnumerable se muestre un control personalizado con las etiquetas completadas en la MainWindow.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, puedes utilizar un DataTemplate en el archivo XAML de tu MainWindow:

    <window>
       <window.resources>
          <datatemplate datatype="{x:Type local:ISlot}">
             <controls:customcontrolslot>
                <stackpanel orientation="Vertical">
                   <label content="{Binding Number}" name="labelNumber"></label>
                   <label content="{Binding Name}" name="labelName"></label>
                </stackpanel>
             </controls:customcontrolslot>
          </datatemplate>
       </window.resources>
    
       <itemscontrol itemssource="{Binding enumSlots}"></itemscontrol>
    
    </window>
    

    Aquí, definimos un DataTemplate que apunta a la interfaz ISlot y establece el contenido de las etiquetas en el control personalizado utilizando la enlace de datos. Luego utilizamos un ItemsControl para mostrar cada elemento en la IEnumerable, y cada elemento se muestra utilizando el DataTemplate definido. El ItemsControl genera automáticamente el número requerido de instancias de nuestro control personalizado basado en el número de elementos en la colección.

Comments are closed.