Einzigen Kombinierten C# - Liste mit mehreren Klasse-Typen
Bauen auf einem post habe ich hier gesehen:
C# - Mehrere generische Typen in einer Liste
Ich soll binden eines WPF-DataGrid die ClassAClassBCombinedList Eigenschaft so etwas wie:
<DataGrid ItemsSource="{Binding ClassAClassBCombinedList.Data}" />
für die Eigenschaft:
public List<CombinedClass> ClassAClassBCombinedList
{
get
{
List<CombinedClass> result = new List<CombinedClass>();
result.Add(new CombinedClass<ClassA>(new ClassA()));
result.Add(new CombinedClass<ClassB>(new ClassB()));
return result;
}
}
Mit CombinedClass definiert als:
public interface CombinedClass { }
public class CombinedClass<T> : CombinedClass where T : class
{
public CombinedClass(T classInstance)
{
Data = classInstance;
}
public T Data { get; private set; }
}
Aber das funktioniert nicht, weil:
'CombinedClass' enthält keine definition für 'Daten' und keine Erweiterungsmethode 'Daten' die Annahme ein erstes argument vom Typ 'CombinedClass'
Können Sie den Zugriff auf die Daten Mitglied durch Gießen, aber diese Niederlagen der Punkt.
((CombinedClass<ClassA>)ClassAClassBCombinedList.First()).Data;
Irgendwelche Ideen auf, wie zu kombinieren, eine Liste mit mehreren Klasse-Typen und binden Sie in WPF??
InformationsquelleAutor SDK | 2011-02-24
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist nicht die Besetzung. Das problem ist, dass
ClassAClassBCombinedList
gibt eineList
, in der Erwägung, dass die EigenschaftData
ist eine Eigenschaft, die jede Instanz in der Liste!Darüber hinaus Ihre Schnittstelle
CombinedClass
ist nutzlos, weil es nicht alles. Sie sollten etwas wieobject Data
im es und überschreibt die Eigenschaft inCombinedClass<T>
mit dernew
Schlüsselwort.Im Allgemeinen, ich bin mir nicht sicher, das ist eine gute Idee, das zu tun, obwohl es ist die akzeptierte Antwort in der verlinkten Frage.
ClassAClassBCombinedList.Data
zu denItemsSource
wo sollten Sie nur bindenClassAClassBCombinedList
. Im DataTemplate in IhremListView
können Sie den Zugriff auf Ihr EigentumData
.Warum nicht Sie machen Sie Ihre
ClassA
undClassB
verwenden die gleiche SchnittstelleIClass
definiert dieData
Eigenschaft? Dann können Sie eineList<IClass>
enthalten kannClassA
sowieClassB
und die Sie binden können, um IhreDataGrid
.Binden und es
public partial class ClassA : IClass {}
. Nach der Zusammenstellung derClassA
dass Sie nicht ändern können, verwendet immer noch das interface und mein Ansatz funktionieren würde, ohne Bearbeitung der vorhandenenClassA
.Möglicherweise werden Sie overthinking diese.
Warum nicht erstellen Sie einfach eine
List<object>
und füllen Sie es mit was auch immer Objekte, die Sie benötigen, um die Anzeige in der Benutzeroberfläche? Dann tun Sie etwas wie:Wenn
ClassA
undClassB
nicht teilen gemeinsame Eigenschaften, können Sie dies tun: