2010-11-26 28 views
1

Ich mache ein UserControl, wo jeder eine Liste pluginieren kann.C#: Generic List Eigenschaft

Intern wird diese Liste sortiert und programmatisch zu einer internen ItemaSource hinzugefügt.

Wer diese Usercontrol nutzen möchte, muss die Eigenschaft verwenden ElementsDataSource

public List<T> ElementsDataSource {get;set;} 

List<T> funktioniert nicht/kompilieren, stattdessen habe ich List<object> zu verwenden.

Aber dann muss ich die Objekte innerhalb des ElementsDataSource wieder auf den generischen Typ umgewandelt, wenn ich sie intern sortieren und sie etc wiederverwenden ...

Wie kann ich eine generische List-Eigenschaft zu meinem Benutzer bieten nur mögen. NET macht es?

Vielleicht ist mein Benutzer Plugin in einem List<Customer> oder List<Department> etc ... oder bin ich total falsch und sollte List<Object> verwenden?

+2

bitte bitte explizit: was meinst du es "funktioniert nicht/compiling"? –

Antwort

0

Beachten Sie, dass .NET IEnumerable oder Object als den Typ einer solchen Eigenschaft verwendet. Anschließend wird über Reflektion entschieden, wie die Daten verarbeitet werden.

Stattdessen können Sie verlangen, dass der Anrufer sortiert oder gefiltert wird und Ihnen lediglich einen vorbereiteten IEnumerable zur Verfügung stellt.

Wenn Sie in der Lage sein müssen, eine Auflistung von Objekten anzuzeigen, und die Auflistung innerhalb des Steuerelements sortiert sein muss und die Auflistung eine "natürliche" Sortierreihenfolge haben muss, sollte das Objekt die Schnittstelle IComparable<T> implementieren. Du könntest dies durch die Wiederwahl entdecken. Sie würden verlangen, dass die Sammlung sowohl IEnumerable<T> als auch IComparable<T> implementiert, so dass Sie eine "natürliche" Sortierung für die Elemente in der Sammlung vornehmen können.

+0

Hey John, nein die Sortierung muss innerhalb des UserControl passieren, weil der Benutzer diesen internen Prozess nicht kümmern sollte. Einfach die Liste in die ElementsDataSource einbinden, die Kunden werden nach ihrer Sortierung sortiert, um im UserControl in der richtigen Reihenfolge angezeigt zu werden! – Elisabeth

+1

Die Sortierung würde normalerweise als ein externer Prozess betrachtet, wenn die Benutzersteuerung zum Zweck der Anzeige ist. Die Steuerelemente sollten die ihnen zur Verfügung gestellten Daten anzeigen, es sei denn, sie ändern die Sortierreihenfolge aufgrund von Benutzereingaben, z. B. durch Klicken auf eine Rasterkopfzeile. Ansonsten sollten sie einfach tun, was ihnen gesagt wird. –

+0

stimme nicht zu, weil => Es ist ein Must-Feature oder ein Teil dieses Steuerelements, um die "Elemente" in dieser Reihenfolge anzuzeigen, die sie beim letzten Mal hinzugefügt/gespeichert haben und sie jetzt erneut aus der Datenbank laden. – Elisabeth

1
+0

Wenn meine Klasse ein UserControl ist, das nicht funktioniert: öffentliche Teilklasse ElementsView : UserControl => Fehler und ich kann nicht in Xaml erklären ;-) – Elisabeth

1

Wenn Sie nicht wollen, Steuerklasse generic (dies ist Ihre List<T> Lösung), dann sollten Sie vielleicht versuchen List<ISomeInterface> mit machen, dass alle mit dieser Steuerung verwendeten Klassen implementieren?