我一直试图在TextBlock
中更改ListBox
的颜色,以使其从绑定中获取颜色。
<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 };
}
}
如果我放置一个断点并检查数据上下文,则可以看到源中的值已更改,但是在视觉上
LongListSelector
并没有改变外观。绑定到ObservableCollection
,并且ItemColor
会通知更改。任何帮助表示赞赏。
最佳答案
您没有提供足够的信息,但是根据您提供的代码,看起来当设置item.ItemColor
时,不会触发ItemColor
的PropertyChanged事件。MyItem
应该实现INotifyPropertyChanged
并调用PropertyChanged(this, new PropertyChangedEventArgs("ItemColor"))
。