2009-02-06 7 views
5

Ich untergliedere das ListBox-Standardsteuerelement. Ich werde über Änderungen an den Elementen informiert, die der Liste hinzugefügt wurden. Die Aufgabe besteht darin, den von der ListBox angezeigten Text für das sich ändernde Element zu aktualisieren.C# forciere ListBox, um Elemente zu aktualisieren

Ich bin mir bewusst, dass ich nur das geänderte Element entfernen und es erneut hinzufügen konnte, aber dies scheint aus offensichtlichen Gründen nicht vorzuziehen.

+0

mögliche Duplikate von [Wie mache ich eine ListBox aktualisieren ihre Artikeltext?] (Http://StackOverflow.com/questions/61421/How-do-I-Make-AlistBox-Refresh-Its-item- Text) – Timwi

+0

Das ist nicht nur ein Duplikat der oben genannten Frage - auch die andere Frage hat viel bessere Antworten. – Timwi

Antwort

15

Leider unterstützt die Datenbindung in ListView keine regulären (Element) Änderungsbenachrichtigungsereignisse (FooChanged/INotifyPropertyChanged). Wenn Sie jedoch über die Änderung informiert sind, können Sie die Liste erneut binden. Da Sie Subklassen, können Sie anrufen:

this.RefreshItems(); 

oder für ein einzelnes Element:

:

this.RefreshItem(index); 

Ansonsten, da diese nicht öffentlich ist, können Sie es durch eine Änderung der DisplayMember simulieren

lb.DisplayMember = ""; 
lb.DisplayMember = "Bar"; 

Ein wenig hacky, vielleicht, aber es funktioniert, und behält die aktuelle Auswahl usw. (im Gegensatz zu der DataSource Clearing).

+0

Danke Mann. Ich sehe aus wie 'ein wenig Hacky' Methoden funktionieren besser als dokumentierte Methoden in MS Windows. – fnc12

1

Warum aktualisieren Sie den Text eines Artikels nicht manuell? Sie können auch erwägen, Ihren eigenen Datenbindungsmechanismus für ListBox einzurichten. Und check out ObjectListView, um zu sehen, ob es irgendeine Hilfe ist.

+0

Die ListBox kümmert sich nicht um geänderte ToStrings der angezeigten Elemente. Das Invalidieren schlägt ebenfalls fehl. Werft einen Blick auf ObjectListView, scheint interessant. :) – mafu