dados WPF ItemsControl vinculativo - adicionando controles extras iniciais
-
03-07-2019 - |
Pergunta
Eu tenho o seguinte XAML para uma ligação de dados itens controlar para mostrar uma lista de grupos, com um rótulo e botão para adicionar um novo grupo que aparece em primeiro lugar:
<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>
Com um pequeno número de grupos, tudo aparece em uma linha.
Grupos + Grupo1 Grupo2 Group3
Quando eu adicionar mais grupos, o painel envoltório contendo os itens wraps, mas o rótulo e o botão inicial para adicionar um novo grupo está em sua própria linha, com os grupos de ligação de dados a partir da próxima linha.
Grupos +
Grupo1 Grupo2 Group3 Group4
GRUPO5
Eu posso entender por que isso está acontecendo, como os painéis do envoltório são aninhados. A minha pergunta é: como posso incluir o primeiro rótulo e botão no painel envoltório interior, de modo que eles não estão em uma fila por conta própria
Grupos + Grupo1 Grupo2 Group3
Group4 GRUPO5
Solução
Se você está feliz com isso:
Grupos + Grupo1 Grupo2 Group3
Group4 GRUPO5
Então eu sugiro usar um Grid
exterior e um WrapPanel
interior. Caso contrário, as opções são:
- Incluir outros controles (
Label
eButton
) ou um modelo de vista reprenting esses controles na coleção que você está ligado. - Escreva a sua própria
Panel
.