更新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"并更新时间条目。如何实现呢?

更新WPF's ObservableCollection内容

正如您所提到的,有很多方法可以做到这一点。然而,我仍然喜欢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。从编码的角度来看,它们是有效的,但从性能的角度来看,简单循环是最好的。