WPF Databinding и Styling на основе данных в элементе в IList - PullRequest
1 голос
/ 20 июня 2009

У меня есть ListBox, связанный со списком предметов (для аргументации, скажем, у него есть строка и две даты ввода и завершения).

Я бы хотел, чтобы цвет фона элементов в ListBox имел серый цвет, если DoneTimeTimeTime равен! = DateTime.MinValue.

Edit:

Должен ли я сделать конвертер? и преобразовать DateTime в Brush на основе значения DateTime?

Что-то вроде этого мой лучший вариант? или я могу использовать простой фрагмент Xaml?

[ValueConversion(typeof(DateTime), typeof(Brush))]
class MyConverter : IValueConverter
{
    ...
}

1 Ответ

8 голосов
/ 20 июня 2009

A ValueConverter будет работать. Другой вариант - использовать DataTrigger в стиле ListBoxItem. Может быть, что-то вроде этого:

<Style x:Name="MinDateTimeListBoxStyle" TargetType="ListBoxItem">
    <Style.Triggers>
        <Setter Property="Background" Value="Gray" />
        <DataTrigger Binding="{Binding Path=Done}"
            Value="{x:Static sys:DateTime.MinValue}">
            <Setter Property="Background" Value="White" />
        </DataTrigger>
    </Style.Triggers>
</Style>

Это установит фон на Серый, когда значение Done не DateTime.MinValue. Я не думаю, что есть способ сделать сравнение не равным в триггере, поэтому он устанавливает фон по умолчанию на Серый и меняет его на белый, только если Done еще не изменился. Вероятно, было бы лучше использовать правильный цвет для фона вместо белого (возможно, получить значение фона родителя?), Но это должно дать вам кое-что для начала.

Обновление : чтобы применить этот стиль к элементам только определенных списков, присвойте стилю имя и установите ItemContainerStyle соответствующим образом:

<ListBox x:Name="StyledListBox"
    ItemContainerStyle="{StaticResource MinDateTimeListBoxStyle}" />
<ListBox x:Name="NormalListBox" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...