2011-12-16 113 views
0

根据某些字段更新ObservableCollection的数据最方便吗?我可以想到很多方法来做到这一点(Linq,迭代...),但我想知道是否有人提供了可以证明的东西。更新WPF的ObservableCollection内容

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”中查找和更新时间条目。 如何做到这一点?

+0

LINQ ............... – Paparazzi 2011-12-16 14:36:15

回答

2

正如你所提到的,有很多方法可以做到这一点。不过,我仍然更喜欢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; 
} 
+0

+1 ...但我想到了这一点,但我对Linq有一些疑问,因为我会做非常频繁的更新。 – 2011-12-16 14:46:05

0

伙计从性能的角度来看的最好的方法是使用循环,你遇到所需的第一次迭代值更新它并使用中断来终止循环。 foreach和可枚举的类扩展函数使用像枚举器这样的额外资源。从编码的角度来看,它们是高效的,但从性能角度来看,简单循环是最好的。