Entwickler-Ecke

Basistechnologien - List<int> in Listbox.Items


GURKE deluxe - Di 13.03.12 19:18
Titel: List<int> in Listbox.Items
Hallo,
Ich habe eine Liste mit integer drin. Diese möchte ich einer Listbox hinzufügen. Per Schleife dauert das bei 10000+ Einträgen schon sehr lange. Deswegen dachte ich, das es wahrscheinlich schneller geht, wenn ich die AddRange-Methode benutze:

C#-Quelltext
1:
lbDatenfeld.Items.AddRange(new object[] { liDatenfeld });                    


Allerdings steht dann in der Listbox nur Auflistung. Wie bekomme ich die Liste elegant in die Listbox rein?

Gruß
Julian


Th69 - Di 13.03.12 19:58

Hallo,

so fügst du in die ListBox nur genau einen Wert hinzu (nämlich die Liste 'liDatenfeld' selbst).
Laß einfach das new object[] { /* ... */ } weg und verwende stattdessen die ToArray()-Methode, also

C#-Quelltext
1:
lbDatenfeld.Items.AddRange(liDatenfeld.ToArray());                    


Edit: da dies nur für Referenztypen funktioniert (also nicht für Wertetypen wie int mußt du in deinem Fall noch Cast<object>() zusätzlich verwenden:

C#-Quelltext
1:
bDatenfeld.Items.AddRange(liDatenfeld.Cast<object>().ToArray());                    

(Stichwort: Boxing/Unboxing)

Weitere Möglichkeiten sind auch unter Convert List<T> to object[] [http://stackoverflow.com/questions/782096/convert-listt-to-object] zu finden.

Alternativ kannst du die manuelle Schleife auch mittels ListBox.BeginUpdate() und ListBox.EndUpdate() umrahmen (damit nicht jede Änderung zu einer Aktualisierung führt).

P.S. Verwendest du wirklich Silverlight (denn dort scheint es kein AddRange zu geben: ItemCollection [http://msdn.microsoft.com/en-us/library/system.windows.controls.itemcollection%28v=vs.95%29.aspx])?


ujr - Mi 14.03.12 10:34

user profile iconGURKE deluxe hat folgendes geschrieben Zum zitierten Posting springen:
Wie bekomme ich die Liste elegant in die Listbox rein?


Über Datenbindung.


Th69 - Mi 14.03.12 11:05

@ujr: Da hast du natürlich Recht ;-)

@Julian: hier ein paar Tutorials dazu:
List Box Data Binding [http://sharpertutorials.com/list-box-data-binding] (einfaches Beispiel)
Data Binding in .NET / C# Windows Forms [http://www.akadia.com/services/dotnet_databinding.html] (DataBinding zu ListBox ist analog zu ComboBox)
A Detailed Data Binding Tutorial [http://www.codeproject.com/Articles/24656/A-Detailed-Data-Binding-Tutorial] (in die Tiefe gehend)