2017-08-24 48 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

感谢您的帮助。我设法找到了解决方案。 –

相关问题