基于IList中项目中的数据的WPF数据绑定和样式

时间:2009-06-19 21:52:10

标签: c# .net wpf data-binding

我有一个ListBox绑定到一个Items列表(对于争论,假设它有一个字符串,两个日期已输入和完成)。

如果Done DateTime为!= DateTime.MinValue,我想使ListBox中项目的背景颜色为灰色。

修改

我应该制作转换器吗?并根据DateTime的值将DateTime转换为Brush?

这样的事情是我最好的选择吗?或者我可以使用一个简单的Xaml片段吗?

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

1 个答案:

答案 0 :(得分:8)

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" />