在我的 wpf 应用程序中,我设置了一个网格视图,其中项目样式应用于所有列。绑定的属性之一是每个单元格中 TextBlock 的前景色。我将颜色包装在一个简单的对象中,这样当颜色改变时,它会通知列表中过去的项目也更新。
但是,当我更改颜色时,并非所有列表项都正确更新。绑定正在起作用,但某些细胞保持其旧颜色。如果我向下滚动列表并备份,那么所有单元格都会正确更新。似乎这可能是列表虚拟化的问题。它似乎也可能是一个错误,因为只有某些列没有在同一行中更新。
我可以做些什么来解决这个问题?
<ListView.View>
<GridView>
<GridViewColumn Header="No." Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Style="{StaticResource MessageListItemStyle}"
Text="{Binding Id}" HorizontalAlignment="Right"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
...
颜色类:
public class Color : INotifyPropertyChanged
{
private Brush _brush;
public Color(Brush brush)
{
_brush = brush;
}
public Brush Value
{
get
{
return _brush;
}
set
{
if (!Equals(_brush, value))
{
_brush = value;
var changed = PropertyChanged;
if (changed != null)
changed(this, new PropertyChangedEventArgs("Value"));
}
}
}
风格:
<Style x:Key="MessageListItemStyle" TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="{Binding ForeColor.Value}" />
</Style>