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