2017-08-24 93 views
0

我有一個ObservationVebleColection綁定到listView。基本上,這個集合必須跟上服務器的每一個變化,並以字符串格式接收更新。添加獨特的元素並自動更新C中的ObservableCollection#

我的代碼解析字符串並將元素添加到集合中,但我無法找到刪除元素的方法。如何在服務器上刪除或更改元素時更新集合?

這裏是我的代碼:

public static ObservableCollection<TransactionDetails> offerList = new ObservableCollection<TransactionDetails>(); 

public async static Task<ObservableCollection<TransactionDetails>> getOfferList() 
    { 
     // Start getting Offers 

     string Offer = await BedpAPI_V1.getOfferList(); 

     string[] splitedResponse = Offer.Split(new[] { "@@@@" }, StringSplitOptions.RemoveEmptyEntries); 

     foreach (string response in splitedResponse) { 
      string[] splitedMessage = response.Split(new[] { "|" }, StringSplitOptions.RemoveEmptyEntries); 

      offer.TransactionID = Convert.ToInt32(splitedMessage[0]); 
      offer.Seller = splitedMessage[1]; 
      offer.Cost = Convert.ToDouble(splitedMessage[2]); 
      offer.Duration = Convert.ToInt16(splitedMessage[3]); 
      offer.Delay = Convert.ToInt16(splitedMessage[4]); 
      offer.Capacity = Convert.ToDouble(splitedMessage[5]); 
      offer.Availability = Convert.ToDouble(splitedMessage[6]); 

      if (currentOffer <= offer.TransactionID) 
      { 
       offerList.Add(new TransactionDetails() { TransactionID = offer.TransactionID, Seller = offer.Seller, Cost = offer.Cost, Duration = offer.Duration, Delay = offer.Delay, Capacity = offer.Capacity, Availability = offer.Availability }); 

       currentOffer++; 
      } 
     } 
     return offerList; 
    } 
+0

@mjwills我認爲這是明確:「在服務器上刪除或更改元素時,如何更新集合?」 –

+0

你的代碼現在做了什麼@DiogoCosta?例如,它是否會拋出異常? **它怎麼樣?** – mjwills

+0

因爲它是代碼做它應該(即它解析字符串並添加元素到集合)。我無法找到一種方法來使用我用來添加它們的相同邏輯來移除或更改當前元素。 –

回答

0

我通過清除上解析splitedResponse之前每次調用集合解決了這個問題 - 爲清除()被拋出unheld例外,必須處理它扔catch塊:

try 
{ 
    offerList.Clear(); 
} 

catch (Exception ex) { 

    offerList.Clear(); 
    Console.WriteLine(ex.Message); 
} 
0

如果用ObservavebleColection<>你的ListView綁定,當你修改的元素,你可以自己觸發一個OnCollectionChanged事件。 假設你使用[]修改元素:

public class MyCollection : ObservableCollection<MyClass> 
{ 
    public new MyClass this[int index] 
    { 
     get { return base[index]; } 
     set 
     { 
      base[index] = value; 
      base.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); 
     } 
    } 
} 

UPDATE:

首先,你可能需要到您的收藏綁定,如:

myCollection = MyFunction(); 
MyListView.ItemsSource = myCollection; 

如果您的收藏喜歡在更改項目:

myCollection[index] = someNewItem; 

然後你可以更新你的李stview like:

MyListView.Refresh(); 

但是建議使用一些動態綁定。

+0

感謝您的幫助,但我認爲這並不能解決我的問題,因爲我的麻煩實際上是如何修改元素。 –

+0

我已經用'[]'索引器更新了一個簡單例子的答案。 – Dia

+0

感謝您的幫助。我設法找到了解決方案。 –

相關問題