Also, ich bin ein wenig außerhalb meiner Komfortzone, wenn ich mit Func <>, Generics und Lambda Ausdrücke, aber ich denke, ich bekomme die allgemeine Idee (Art), aber immer noch ein bisschen verwirrt.C# Func <> und Generika
ich die SortableObservableCollection Klasse implementiert haben (von irgendwo online genommen - dank wer auch immer es war habe ich es aus!) Und es wie folgt verwendet:
_lookuplistViewModel.Sort(x => x.BrandName, ListSortDirection.Ascending);
wobei x der Objekttyp von implementiert wird die sortierbare Sammlung. In diesem Fall ist BrandName eine Eigenschaft des Typs des implementierten Objekts, aber ich möchte den obigen Code in einer generischen Klasse verwenden und die zu sortierende Eigenschaft übergeben. Die Sort-Methode sieht wie folgt aus:
public void Sort<TKey>(Func<T, TKey> keySelector, ListSortDirection direction)
{
switch (direction)
{
case ListSortDirection.Ascending:
{
ApplySort(Items.OrderBy(keySelector));
break;
}
case System.ComponentModel.ListSortDirection.Descending:
{
ApplySort(Items.OrderByDescending(keySelector));
break;
}
}
}
Die generische Klasse, auf dem die Sort-Methode ist wie folgt definiert genannt:
public class ExtendedLookupManagerViewModel<VMod, Mod> : LookupManagerViewModel
where VMod : ExtendedLookupViewModel
where Mod : ExtendedLookupModelBase
und ich möchte eine Instanz davon wie diese erstellen:
_medProd = new ExtendedLookupManagerViewModel<MedicinalProductViewModel, MedicinalProduct>(string property);
wo property
ist das Grundstück, auf dem sortieren. Idealerweise sollte dies typsicher sein, aber eine Zeichenfolge reicht aus.
Kann mir bitte jemand helfen, mich in die richtige Richtung zu lenken?
Ich bin ziemlich in Ordnung sein, aber ich kann nicht herausfinden, was Du fragst nach, die erste Codezeile, die du gepostet hast, erfüllt das, was du von deiner Beschreibung der Anforderungen verlangst, aber dein Konstruktor scheint nichts mit dem zu tun zu haben, worüber du sprichst. Ich bin sehr verwirrt. Was ist Ihre Sammlung, die Sie sortieren möchten? –
Sie sind genau richtig, die erste Zeile funktioniert aber nur, wenn ich einen bestimmten Typ verwende, der von ExtendedLookupManagerViewModel abgeleitet ist, anstatt Generics zu verwenden. BrandName ist eine Eigenschaft von MedicinalProductViewModel, aber wenn ich einen anderen Typ verwende, muss ich eine andere Eigenschaft verwenden können. Die Frage ist, wie kann ich einen übergebenen Parameter anstelle von x.BrandName verwenden.Hoffe das macht es ein bisschen klarer? – pilsdumps