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.
davy.ai
Para lograr esto, puedes utilizar un DataTemplate en el archivo XAML de tu MainWindow:
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.