Datenbindung an eine Sammlung mit unterschiedlichem Verhalten für das letzte Element
-
20-12-2019 - |
Frage
Dies scheint ein häufiges Problem zu sein, aber mein Google-Fu ließ mich leer zurück.Entschuldigung, wenn das schon tausendmal gefragt wurde!
Ich habe eine Sammlung, sagen wir mal ObservableCollection<Athlete>
.Ich möchte diese Sammlung auf dem Bildschirm anzeigen, sodass sie etwa so aussieht:
Jersey Pic] | [Jersey Pic] | [Jersey Pic] | [Jersey Bild
Der Schlüssel zu diesem erfundenen Beispiel ist der kleine Balken zwischen den einzelnen Bildern.Subtrahieren Sie diesen Balken und es ist nur noch ein ListBox
an die Sammlung gebunden, mit a ItemsPanelTemplate
einer Horizontalen StackPanel
, und dann ein ItemTemplate
um für jeden Artikel das entsprechende Trikotbild anzuzeigen.Keine Probleme!
Die Frage ist dann, wie man die Leiste anfügt, bei der es sich schließlich um ein beliebiges grafisches Element handeln kann, mit Ausnahme des letzten Elements in der Sammlung.
Danke schön!
Lösung
Wie im Link von @KornMuffin vorgeschlagen, können Sie die Leiste auf der linken Seite des ListBox-Elements platzieren:
| [Jersey Pic] | [Jersey Pic] | [Jersey Pic] | [Jersey Bild
Dann benutze DataTrigger
mit {RelativeSource PreviousData}
Bindung, um den ersten Balken auszublenden, wenn die vorherigen Daten null sind.Nehmen wir zum Beispiel an, dass ich verwende Separator
Um die Leiste anzuzeigen, kann ich dem Trennzeichensteuerelement diesen Stil hinzufügen, um das erste Trennzeichen auszublenden:
<Separator.Style>
<Style TargetType="Separator">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Separator.Style>