ПРИМЕЧАНИЕ. Я задал связанный вопрос: Как объединить DataTrigger и EventTrigger?
У меня есть список, содержащий несколько пунктов. Класс элемента реализует INotifyPropertyChanged
и имеет свойство IsAvailable
. Я использую это свойство для обозначения недоступных опций в списке другим цветом.
Однако, если выбранный элемент недоступен, цвет переднего плана должен быть красным.
<ListBox>
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:InstitutionViewModel}">
<TextBlock Name="Name" Text="{Binding Name}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsAvailable}" Value="False">
<Setter TargetName="Name" Property="Foreground" Value="#888"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.Resources>
</ListBox>
Я использую указанный выше триггер данных, чтобы выделить недоступные элементы серым цветом.
Проблема, с которой я столкнулся, заключается в том, что тот факт, что элемент выбран, не имеет ничего общего с базовыми данными, к которым привязан шаблон. Что мне действительно нужно, так это какой-то мульти-триггер, который поддерживает как обычный Trigger
для свойства зависимости (ListBoxItem.IsSelected
), так и DataTrigger
для привязанного элемента данных.
Можно ли это сделать без введения концепции выбора в мою модель представления?
Тем, кто задается вопросом, почему я не отключаю недоступные элементы, следует понимать, что это требование приложения, чтобы можно было выбирать недоступные параметры. На самом деле есть несколько списков, и выбор в одном из них влияет на то, что доступно в других. Я не могу отключить элементы, так как пользователь не сможет изменить свое мнение или изучить различные комбинации, если элементы были отключены на основании ранее сделанного выбора.