2017-08-24 2 views
0

Ich habe eine ObservavebleColection an eine ListView gebunden. Grundsätzlich muss diese Sammlung mit jeder Änderung im Server Schritt halten und Updates im String-Format erhalten.Fügen Sie eindeutige Elemente hinzu und aktualisieren Sie automatisch ObservableCollection in C#

Mein Code analysiert die Zeichenfolge und fügt Elemente zur Auflistung hinzu, aber ich habe Probleme, eine Möglichkeit zum Entfernen von Elementen zu finden. Wie kann ich die Sammlung aktualisieren, wenn ein Element auf dem Server entfernt oder geändert wird?

Hier ist mein Code:

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 denke ich, es ist clear: "Wie kann ich die Sammlung aktualisieren, wenn ein Element auf dem Server entfernt oder geändert wird?" –

+0

Was macht dein Code jetzt @DiogoCosta? Wird zum Beispiel eine Ausnahme ausgelöst? ** Was ist damit nicht funktioniert? ** – mjwills

+0

Wie es der Code tut, was es soll (d. H. Es analysiert die Zeichenfolge und fügt Elemente zur Sammlung). Ich habe Probleme, einen Weg zu finden, um aktuelle Elemente zu entfernen oder zu ändern, indem ich dieselbe Logik verwende, um sie hinzuzufügen. –

Antwort

0

ich das Problem durch Löschen der Sammlung bei jedem Aufruf, bevor das Parsen splitedResponse gelöst - wie Clear() wurde eine unheld Ausnahme zu werfen, hatte es in einem Wurf catch-Block zu behandeln:

try 
{ 
    offerList.Clear(); 
} 

catch (Exception ex) { 

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

Wenn Ihr Listview binden mit einem ObservavebleColection<>, wenn Sie ein Element ändern, können Sie eine OnCollectionChanged Ereignis selbst feuern. Angenommen, Sie ein Element ändern [] mit:

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:

Erstens möchten Sie können Ihre Sammlung wie binden:

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

Wenn Sie ein Element in Ihrer Sammlung ändern wie:

myCollection[index] = someNewItem; 

Dann könnten Sie Ihre Li aktualisieren stview like:

MyListView.Refresh(); 

Aber es wird empfohlen, einige dynamische Bindung zu verwenden.

+0

Vielen Dank für die Hilfe, aber ich denke, das löst mein Problem nicht, da mein Problem darin besteht, ein Element zu modifizieren. –

+0

Ich hatte die Antwort eines einfachen Beispiels mit '[]' Indexer aktualisiert. – Dia

+0

Danke für die Hilfe. Ich habe eine Lösung gefunden. –

Verwandte Themen