更改绑定的LongListSelector或Listbox的项颜色

时间:2011-11-20 16:25:55

标签: c# windows-phone-7

我一直在尝试更改TextBlockListBox的颜色,以便从绑定中获取颜色。

<TextBlock Text="{Binding Title}" TextWrapping="Wrap" Foreground="{Binding ItemColor, Converter={StaticResource ColorConverter}}" Style="{StaticResource posttitle}" d:LayoutOverrides="Width"/>

这是在初始渲染期间工作的转换器:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    if (value == null)
        return new SolidColorBrush(Colors.Red);

    Color colorValue = (Color)value;

    return new SolidColorBrush(colorValue);
}

在SelectionChanged事件期间,我为项目分配了一种新颜色,如下所示:

private void List_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var listbox = (LongListSelector)sender;

    if (listbox.SelectedItem == null)
        return;

    MyItem item = (MyItem)listbox.SelectedItem;

    if (item.Clicked)
    {
        // Change some value
        item.Clicked = true;
        item.ItemColor = new Color() { A = 0xFF, R = 0xBD, G = 0xB7, B = 0x6B };
    }
}

如果我放置一个断点并检查datacontext,我可以看到源中的值已经改变,但在视觉上LongListSelector没有改变外观。绑定是ObservableCollectionItemColor确实通知了更改。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

您没有提供足够的信息,但根据您提供的代码,看起来设置item.ItemColor时,ItemColor的PropertyChanged事件未被触发。

MyItem应实施INotifyPropertyChanged并致电PropertyChanged(this, new PropertyChangedEventArgs("ItemColor"))