2011-12-16 111 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和可枚舉的類擴展函數使用像枚舉器這樣的額外資源。從編碼的角度來看,它們是高效的,但從性能角度來看,簡單循環是最好的。