繁体   English   中英

WPF GridView样式绑定未在所有列上更新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM