绑定到ListBox ItemTemplate中的Rectangle?

时间:2014-01-16 21:08:04

标签: c# wpf

我有一个ListBox,它使用内容的数据绑定(绑定到ObservableCollection),以及用于布局的ItemTemplate。在ItemTemplate中,有一个TextBlock显示日期(来自ObservableCollection)和一个彩色的Rectangle。

我希望矩形的填充颜色根据日期(表示年龄)而变化。但是,由于Rectangle本身并未绑定日期(我不知道它是怎么回事),因此我无法使用DataTrigger来改变填充颜色。

还有另一种方法可以通过数据绑定来控制矩形颜色吗?

修改

这是我的ListBox ItemTemplate的(简化)副本,如请求的那样。现在,Rectangle的填充是一种设置颜色,但我想根据targetstartdate字段改变它。

<ListBox Name="listBox1" ItemsSource="{Binding Path=testList}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="1*" />
                </Grid.ColumnDefinitions>
                <Rectangle Fill="#FF009A00" Width="5" StrokeThickness="1" Margin="0,1,4,1"/>
                <TextBlock Text="{Binding targetstartdate}" Margin="0,0,0,4" Foreground="#FF009A00" />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

2 个答案:

答案 0 :(得分:1)

将矩形的颜色绑定到IValueConverter,使用日期作为绑定,并根据IValueConverter类中的日期确定颜色。

答案 1 :(得分:1)

您可以将矩形的FillStroke属性绑定到Date。然后,使用IValueConverter将日期转换为适当的颜色。

<Window.Resources>
    <local:DateToBrushConverter x:Key="DateToBrushConverter" />
</Window.Resources>

<Rectangle Fill="{Binding targetstartdate,Converter={StaticResource DateToBrushConverter}}" 
... />

Convert方法应返回Brush对象,该对象与Rectangle.Fill属性匹配。

public class DateToBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var date = value as DateTime?;
        if (!date.HasValue)
            return new SolidColorBrush(Colors.Transparent);
        else if (!date.Value > DateTime.Today.AddDays(-1))
            return new SolidColorBrush(Colors.Blue);
        // etc
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}