gpt4 book ai didi

c# - WPF UI 不会因 ConcurrentBag 类型集合的更改而更新

转载 作者:行者123 更新时间:2023-12-02 00:59:15 25 4
gpt4 key购买 nike

我有一个集合,它绑定(bind)到 WPF UI 中的数据网格。

我的要求是我必须每秒为集合中的每个项目更新属性值 10 次。

所以我采用了 ConcurrentBag 类型集合。更新每个项目的值后。我明确解雇 RaisePropertyChange 。但用户界面并没有改变。

private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
if (stockCollection != null)
{
stockCollection.ToList().ForEach((s) => s.Price = DateTime.Now.Millisecond);
Action raiseStockCollectionProperty = new Action(() => RaisePropertyChangedEvent("StockCollection"));
Dispatcher.BeginInvoke(raiseStockCollectionProperty);
}
}

最佳答案

我认为之前的答案无法解决您的问题。事实上,您根本没有更新集合:您正在更新集合中所有 Stock 实例的属性。更新集合意味着添加或删除其中的项目。由于语义不同,当您触发 CollectionChanged 事件时,绑定(bind)控件可能不会检查集合中已存在对象的属性。这将是一个明智的优化。

我建议您在 Stock 类中实现 INotifyPropertyChange,并在 Price 属性 setter 中触发 propertyChanged 事件(但是在良好的线程上,使用 Dispatcher)。

private DateTime _price;
public DateTime Price
{
get
{
return _price;
}
set
{
if(_price!=value)
{
_price = value;
RaisePropertyChanged("Price");
}
}
}
protected void RaisePropertyChanged(string property)
{
var propertyChanged = PropertyChanged;
if(propertyChanged!=null)
{
propertyChanged(this,new PropertyChangedEventArgs(property));

}
}

关于c# - WPF UI 不会因 ConcurrentBag 类型集合的更改而更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8868671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com