簡體   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