Я создал DataTemplate для моего объекта Component. Я добавил DataTrigger, чтобы определить, должен ли компонент быть видимым или нет. По существу у нас есть фильтры, и код проверяет эти фильтры, чтобы определить, должен ли компонент быть видимым или свернуть. Проблема заключается в том, что я хочу, чтобы триггер установил видимость «Collapse» или «Visible» из родительского контейнера, то есть ListBoxItem. Код работает, но вместо этого устанавливает его на границе.WPF Как установить видимость родительского контейнера из шаблона данных
Шаблон начинается так:
<DataTemplate DataType="{x:Type local:Component}">
<Border .....
я обеспечиваю код для моего Trigger, и я объясню, что я пытался ниже без успеха.
<DataTemplate.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource TrueWhenComponentIsVisible}">
<Binding Path="Type" />
<Binding Path="Dependency"/>
<Binding Path="SelectedType" RelativeSource="{RelativeSource FindAncestor, AncestorType=Window}"/>
<Binding Path="SelectedDepencency" RelativeSource="{RelativeSource FindAncestor, AncestorType=Window}"/>
</MultiBinding>
</DataTrigger.Binding>
<DataTrigger.Setters>
<Setter Property="Visibility" Value="Visible"></Setter>
</DataTrigger.Setters>
</DataTrigger>
<DataTrigger Value="False">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource TrueWhenComponentIsVisible}">
<Binding Path="Type" />
<Binding Path="Dependency"/>
<Binding Path="SelectedType" RelativeSource="{RelativeSource FindAncestor, AncestorType=Window}"/>
<Binding Path="SelectedDepencency" RelativeSource="{RelativeSource FindAncestor, AncestorType=Window}"/>
</MultiBinding>
</DataTrigger.Binding>
<DataTrigger.Setters>
<Setter Property="Visibility" Value="Collapsed"></Setter>
</DataTrigger.Setters>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
Для Setter Property
<Setter Property="Visibility" Value="Collapsed"></Setter>
Я попытался использовать связывание, чтобы получить ListBoxItem так:
<Setter Property="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBoxItem}, Path=Visibility}" Value="Collapsed"></Setter>
Я получаю эту ошибку, когда я пытаюсь запустить его, так Я предполагаю, что вообще не могу использовать привязку и нужен другой подход?
A 'Binding' cannot be set on the 'Property' property of type 'Setter'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject
Я бы рекомендовал исследовать 'ListCollectionView'. Затем ваш «ListBox» может использовать представление в качестве источника и указать фильтры в коде. Это намного чище, чем попытка сделать это на уровне xaml. – Julien
Что не так с настройкой видимости на границе? – Paparazzi
Насколько я знаю, '' Binding' не работает в 'Setter.Property'. Вы должны указать статическое значение в свойстве. –