Я в странной ситуации. Я создаю список элементов, сгруппированных по определенным категориям. В моей модели зрения у меня есть элементы, хранящиеся в экземпляре ReadOnlyDictionary<string, List<CustomObject>>
, где CustomObject
представляет класс, который я создал для хранения каждого элемента списка. Строка - это категория. На мой взгляд, у меня есть StackPanel
с <ItemsControl>
внутри него. Контроль пунктов имеет ItemTemplate
, какой вид выглядит следующим образом:Wpf tempating - Как получить доступ к родительскому элементу элемента ItemsControl?
<DataTemplate x:Key="DataTemplateName">
<StackPanel>
<Separator />
<TextBlock Text="{Binding Key}" />
<ItemsControl ItemsSource="{Binding Value}" />
</StackPanel>
</DataTemplate>
Привязки выше работы большой. Проблема в том, что я не хочу, чтобы разделитель находился над первым элементом. Поэтому я думаю, мне нужен другой стиль для первого элемента.
Я пробовал использовать ItemTemplateSelector
, но проблема в том, что он имеет доступ только к текущему элементу, поэтому он не знает, находится ли он в первом элементе. Я также пытался делать что-то вроде
<Separator
Visibility={Binding ShowSeparator, RelativeSource={RelativeSource AncestorType={x:Type CustomObject}}}" />
... где ShowCategories свойство зависимостей в классе CustomObject, который смотрит на ReadOnlyDictionary инстанции и говорит ли или не показывать разделители. Но ShowCategories никогда не открывается, когда я это делаю. Я думаю, что даже если бы это было так, у него не было бы способа узнать, какой элемент его вызывает.
So. Что я делаю?
Вы можете добавить DataTrigger в стиль Separator, который скроет разделитель, если выбран первый элемент. –