Привязка данных к коллекции с другим поведением для последнего элемента
-
20-12-2019 - |
Вопрос
Кажется, что это была бы распространенная проблема, но мой поиск в Google-Fu оставил меня безрезультатным.Приношу извинения, если об этом уже спрашивали тысячу раз!
У меня есть коллекция, скажем, ObservableCollection<Athlete>
.Я хочу отобразить эту коллекцию на экране так, чтобы она выглядела примерно так:
[Фото Джерси] | [Фото Джерси] | [Фото Джерси] | [Фото Джерси]
Ключевым моментом в этом надуманном примере является маленькая полоска между каждой картинкой.Вычтите эту планку, и это будет просто ListBox
привязанный к коллекции, с ItemsPanelTemplate
из горизонтального StackPanel
, а затем ItemTemplate
чтобы показать соответствующее изображение трикотажа для каждого элемента.Никаких проблем!
Тогда вопрос в том, как добавить панель, которая может быть любым графическим элементом, в конце концов, кроме последнего элемента в коллекции?
Спасибо!
Решение
Как предложено в ссылке от @KornMuffin, вы можете поместить панель в левой части элемента ListBox :
| [Фото Джерси] | [Фото Джерси] | [Фото Джерси] | [Фото Джерси] / [Фото Джерси]
Затем используйте DataTrigger
с {RelativeSource PreviousData}
привязка, чтобы скрыть первую строку, если предыдущие данные равны нулю.Например, предположим, что я использую Separator
чтобы отобразить панель, я могу добавить этот стиль к элементу управления separator, чтобы скрыть первый разделитель :
<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>