Условное изменение переднего плана элемента выпадающего списка WPF в зависимости от значения в элементе databound ItemsSource

#wpf #combobox #datatrigger

#wpf #выпадающий список #datatrigger

Вопрос:

У меня есть выпадающий список WPF, привязанный к коллекции List<Users> . Я применил DataTemplate для отображения первого имени с помощью текстового блока, и это работает, как ожидалось:

         <ComboBox Margin="5" ItemsSource="{Binding Path=TheUsers}" Name="cboUsers">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Margin="10" Text="{Binding Path=FirstName}">
                    </TextBlock>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>`
  

У меня есть элемент в моем пользовательском классе с именем isActive, который является логическим значением. Если true, то я хочу установить для переднего плана текстового блока значение Navy.

Я потратил так много времени на то, что должно быть так просто, и просмотрел весь Веб, но в большинстве статей говорится об изменении общего цвета или привязке к другому элементу в xaml.

Я попытался реализовать DataTrigger и через час удалил код, потому что он не работал. Он не распознал бы имя моего поля. Есть ли у кого-нибудь очень простое руководство о том, как это сделать или какой подход был бы наилучшим?

Ответ №1:

Поскольку вы, очевидно, в конце концов, имеете дело не с полями, этот стиль должен делать то, что вы хотите:

 <TextBlock.Style>
    <Style TargetType="{x:Type TextBlock}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsActive}" Value="True">
                <Setter Property="Foreground" Value="Navy"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</TextBlock.Style>
  

Он не распознал бы имя моего поля.

Вы не можете привязываться к полям, конец истории.

Комментарии:

1. Спасибо за это, но должен быть способ сделать это. Есть ли другой способ, которым я могу условно изменить цвет элемента на основе значения в элементе, привязанном к элементу выпадающего списка?

2. Почему бы не сделать это общедоступным свойством, если оно должно быть общедоступным?

3. Извините. Я довольно новичок в Wpf и .NET, хотя программирую уже 188 год. Я думаю, что у меня может быть некоторая терминология, которая здесь неверна. Список объектов пользовательского класса предоставляет свойство, вызывающее FirstName и являющееся активным. Они оба общедоступны вместе со многими другими. Мне нужно получить доступ к этим свойствам. Я никогда не использую наборы данных или поля in.NET. Это грязно. Помогает ли это?

4. Блестяще — я добираюсь туда, хотя для меня это должно быть просто. Это сработало отлично.