WPF Itemsdatenbindung - das Hinzufügen zusätzlicher Erstkontrollen
-
03-07-2019 - |
Frage
Ich habe folgende XAML für einen Databound Artikel eine Liste der Gruppen zu zeigen, zu steuern, mit einem Etikett und um eine neue Gruppe erstauftretende hinzuzufügen:
<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>
Mit einer kleinen Anzahl von Gruppen, scheint alles auf einer Linie.
Gruppen + Gruppe1 Gruppe2 Group3
Als ich hinzufügen mehr Gruppen, der Wrap-Panel die Elemente enthält, Wraps, aber das erste Label und Button eine neue Gruppe hinzuzufügen auf einer eigenen Zeile ist, wobei die Databound-Gruppen auf der nächsten Zeile beginnen.
Gruppen +
Gruppe1 Gruppe2 Group3 Gruppe4
Group5
Ich kann verstehen, warum dies geschieht, da die Wickelplatten verschachtelt sind. Meine Frage ist: Wie füge ich das erste Etikett und Knopf in der inneren Hülle Platte, so dass sie auf ihrem eigenen nicht auf einer Zeile sind
Gruppen + Gruppe1 Gruppe2 Group3
Gruppe4 Group5
Lösung
Wenn Sie glücklich mit diesem:
Gruppen + Gruppe1 Gruppe2 Group3
Gruppe4 Group5
Dann würde ich vorschlagen, eine äußere und eine innere Grid
WrapPanel
verwenden. Andernfalls Ihre Optionen sind:
- Fügen Sie die anderen Kontrollen (
Label
undButton
) oder ein Ansichtsmodell, diese Kontrollen in der Sammlung reprenting Sie sind verbindlich. - Schreiben Sie Ihre eigene
Panel
.