更新WPF's ObservableCollection内容
本文关键字:ObservableCollection 内容 WPF 更新 | 更新日期: 2023-09-27 18:18:08
基于某些字段更新ObservableCollection的数据最方便的方法是什么?我可以想出很多方法(Linq,迭代等等),但我想知道是否有人能提供一些证明。
public ObservableCollection<CCData> CCDataList =
new ObservableCollection<CCData>();
public class CCData : INotifyPropertyChanged
{
public string Symbol { get; set; }
public string LastTick { get; set; }
//INotifyPropertyChanged stuff here...
}
CCDataList.Add(new CCData
{
Symbol = "EUR/USD",
Time = "12:21:58"
});
CCDataList.Add(new CCData
{
Symbol = "AUD/JPY",
Time = "12:25:40"
});
假设我想在集合中查找符号条目"EUR/USD"并更新时间条目。如何实现呢?
正如您所提到的,有很多方法可以做到这一点。然而,我仍然喜欢Linq的手下来,会做这样的事情。虽然这不是很防御性的编码,但你明白了。
CCDataList.Where(c => c.Symbol == "EUR/USD").First().Time = DateTime.Now;
您可以创建一个简单的方法来为您更新属性
public void UpdateCurrencyTime(string currencySymbol, DateTime time)
{
var item = CCDataList.Where(c => c.Symbol == currencySymbol).FirstOrDefault();
if(item != null)
item.Time = time;
}
从性能的角度来看,最好的方法是使用for循环进行迭代,当您第一次遇到所需的值时更新它并使用break终止循环。Foreach和enumerable类扩展函数使用了额外的资源,比如enumerator。从编码的角度来看,它们是有效的,但从性能的角度来看,简单循环是最好的。