Enlace de datos de WPF ItemsControl - agregando controles iniciales adicionales
-
03-07-2019 - |
Pregunta
Tengo el siguiente XAML para un control de elementos enlazados a datos para mostrar una lista de grupos, con una etiqueta y un botón para agregar un nuevo grupo que aparece primero:
<WrapPanel Orientation="Horizontal">
<Label Content="Groups" />
<Button x:Name="btnGroupAdd" Click="btnGroupAdd_Click" Content="+" />
<ItemsControl ItemsSource="{Binding}" x:Name="_groupList" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal">
</WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Padding="3" BorderThickness="1">
<WrapPanel>
<CheckBox x:Name="_groupEnabled" Click="GroupEnabled_Click" IsChecked="{Binding Path=Checked}">
<TextBlock x:Name="_groupName" Text="{Binding Path=Group.Name}" ></TextBlock>
</CheckBox>
<Button x:Name="_deleteGroup" FontStyle="Normal" Click="DeleteGroup_Click" />
</WrapPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Con un pequeño número de grupos, todo aparece en una línea.
Grupos + Grupo1 Grupo2 Grupo3
Cuando agrego más grupos, el panel de ajuste que contiene los elementos se ajusta, pero la etiqueta inicial y el botón para agregar un nuevo grupo están en su propia fila, con los grupos enlazados a datos que comienzan en la siguiente fila.
Grupos +
Grupo1 Grupo2 Grupo3 Grupo4
Grupo 5
Puedo entender por qué sucede esto, ya que los paneles de envoltura están anidados. Mi pregunta es: ¿cómo incluyo la primera etiqueta y el botón en el panel de envoltura interno para que no estén en una fila por su cuenta?
Grupos + Grupo1 Grupo2 Grupo3
Grupo 4 Grupo 5
Solución
Si estás contento con esto:
Grupos + Grupo1 Grupo2 Grupo3
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Grupo4 Grupo5
Luego sugeriría usar un Grid
externo y un WrapPanel
interno. De lo contrario, sus opciones son:
- Incluya los otros controles (
Label
yButton
) o un modelo de vista que reproduzca esos controles en la colección a la que está vinculado. - Escriba su propio
Panel
.