2017-03-21 2 views
2

Ich möchte für meine ListBox die alten Werte mit neuen Werten aktualisieren, anstatt einfach mehr und mehr Zeilen zu der ListBox hinzuzufügen, als wenn sie es gerade tut. Ich bin mir jedoch nicht sicher, wo ich etwas implementieren soll, das damit umgehen kann.ListBox mit neuen COM-Port-Daten aktualisieren

Meine aktuellen Code sieht wie folgt aus:

private void DisplayText(string rawData) 
{ 
    textArduinoData.Text = rawData; 
    string[] sortedData = rawData.Split(';'); 

    for (int i = 0; i < sortedData.Length; i++) 
    { 
     listPortData.Items.Add(sortedData[i].ToString()); 

    } 
} 

Könnte jemand bitte mich in die richtige Richtung dieses Update-Funktion zu implementieren? Jeder Rat würde sehr geschätzt werden.

Antwort

2

Sie müssen den Prozess verwalten. Es ist einfach im Konzept, aber abhängig davon, wie viele Daten verarbeitet werden müssen, kann es schnell langsam werden. Die Schritte

  1. erstellen spezialisierte Token Klasse, die zu INotifyPropertyChanged implementiert.

  2. Haben Sie eine ObservableCollection halten Sie die Klasse Elemente von # 1. Die beobachtbare Sammlung benachrichtigt die ListBox, wenn ein Element hinzugefügt oder entfernt wird. Dadurch kann Ihr Code Elemente einzeln hinzufügen. (Solves 1 Problem)

  3. Um das nächste Problem der Daten lösen zu ändern: Hat eine Eigenschaft Text, auf der Klasse in # 1 benannt, die die Daten enthalten werden, eine Eigenschaft Änderungsbenachrichtigung bieten.

  4. Im Listenfeld an die Liste der in Schritt 1 erstellten Elemente binden und angeben, dass die Bindung an Text erfolgen soll. Wenn Sie eine Datenvorlage für das Listenfeld verwenden, können Sie an die Eigenschaft Text der Listeninstanz binden.

  5. Geben Sie die Heuristik/smarts eingehende Daten zu lesen und die zugehörigen Daten in der beobachtbaren Sammlung von Schritt 2. Wenn gefunden ändern, um die Text Eigenschaft der vorhandenen Daten in den neuen und die Bindung dieser Liste Artikel finden entsprechend ändern .

+0

Vielen Dank für die Zeit, um einen Kommentar nehmen, aber ich landete es den Weg zur Arbeit, ein Binding und anschließend das Binding als Datasource für die List-Box verwenden, bevor ich diese Seite heute Morgen überprüft. – CuriousLekgolo

+0

@CuriousLekgolo Zuerst einmal, egal, ich bin froh, dass Sie Ihr Problem ausgearbeitet haben. Zweitens ist dies immer noch eine gültige Antwort und ich wäre nicht beleidigt, wenn Sie es als Antwort markieren. :-) – OmegaMan

0

Sie könnten überprüfen, ob die ListBox die string enthält die IndexOf Methode und aktualisieren Sie dann die vorhandene string (oder einfach nichts tun) oder eine neue hinzufügen, je nachdem, ob Sie einen Index anders als der Standardwert erhalten von -1 zurück:

private void DisplayText(string rawData) 
{ 
    textArduinoData.Text = rawData; 
    string[] sortedData = rawData.Split(';'); 

    int index; 
    for (int i = 0; i < sortedData.Length; i++) 
    { 
     if ((index = listPortData.Items.IndexOf(sortedData[i])) == -1) 
     { 
      listPortData.Items.Add(sortedData[i]); 
     } 
    } 
} 
Verwandte Themen