[英]WPF GridView Style bindings not updating on all columns
在我的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>
有点长的注释,您如何在对象上设置Color
? 在制作一个小模型时犯了一个小错误之后,我能够复制您描述的错误。
我像上面一样绑定了ListView
,并创建了一个具有Foreground
属性的100个对象的集合,并初始化为新的SolidColorBrush
。 所有对象均设置为初始颜色,没有问题。
然后,我遍历集合,使用如下一行将“ Color
更改为新的Color
:
p.ForeColor = new Color(new SolidColorBrush(...));
所以这是我的错误,因为每次都设置一个新的Color
时, ForeColor
属性的setter永远不会触发,因此不会触发PropertyChanged
事件。 只有当前不在视图中的项目才会更新,其他项目将保持不变,直到我将它们滚动到完全看不见为止。
我应该做的是:
p.ForeColor.Value = new SolidColorBrush(...);
然后所有的二传手都被击中,事件被触发,一切都按我的预期工作。
不过,那可能不是您正在发生的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.