Bindung DataGrid ObservableCollection<Wörterbücher>
Ich habe eine ObservableCollection<Dictionary>
wollen und binden Sie es an einen DataGrid
.
ObservableDictionary<String,Object> NewRecord1 = new ObservableDictionary<string,object>();
Dictionary<String,Object> Record1 = new Dictionary<string,object>();
Record1.Add("FirstName", "FName1");
Record1.Add("LastName", "LName1");
Record1.Add("Age", "32");
DictRecords.Add(Record1);
Dictionary<String, Object> Record2 = new Dictionary<string, object>();
NewRecord2.Add("FirstName", "FName2");
NewRecord2.Add("LastName", "LName2");
NewRecord2.Add("Age", "42");
DictRecords.Add(Record2);
Wollte ich die Schlüssel zu den header der DataGrid
und die Werte der einzelnen Dictionary
Artikel auf die Zeilen. Einstellung der ItemsSource
funktioniert nicht.
DataGrid einfach nicht unterstützen. Wenn Sie brauchen, dynamische Spalten gibt es andere Möglichkeiten.
Ich brauche dynamischen Spalten. Können Sie bitte zeigen Sie mir andere Wege, dies zu tun?
In deinem Beispiel sieht es aus wie Sie ' re hinzufügen von Personen in das raster. Ich nehme an, Sie brauchen dynamische Spalten, weil Sie brauchen werden, um andere Dinge als Personen, die im gleichen raster eine andere Zeit? Wenn dem so ist, wäre es akzeptabel, um eine
Ja, du hast Recht. Eigentlich wäre es test Ergebnisse - mehrere tests werden in der Folge, und derzeit Laufenden test Ergebnis wäre in der Tabellenansicht dargestellt. Ich hielt das hinzufügen von Ergebnis-Klasse für jeden test-Ergebnis. Ich bin verwirrt, wie ich die Daten aktualisieren, die Bindung auf der Grundlage der test ausgeführt wird. Ich wollte nicht, fügen Sie eine select-Anweisung in der Ansicht, um das entsprechende Objekt zu binden - wie dies erforderlich wäre, mich zu aktualisieren, jedes mal, wenn wir einen neuen test. ich dachte, das war nicht ein gutes design. Eine bessere Möglichkeit des Umgangs mit diesen?
Würden Sie wirklich brauchen, verschiedene Klassen für die verschiedenen tests? Könnte Sie aktualisieren Sie Ihren Beitrag, indem ein Beispiel einer solchen Klasse?
Ich brauche dynamischen Spalten. Können Sie bitte zeigen Sie mir andere Wege, dies zu tun?
In deinem Beispiel sieht es aus wie Sie ' re hinzufügen von Personen in das raster. Ich nehme an, Sie brauchen dynamische Spalten, weil Sie brauchen werden, um andere Dinge als Personen, die im gleichen raster eine andere Zeit? Wenn dem so ist, wäre es akzeptabel, um eine
Person
Klasse, und ähnliche Klassen für alle anderen Elemente, die Sie anzeigen müssen (anstatt Dictionary<>
)?Ja, du hast Recht. Eigentlich wäre es test Ergebnisse - mehrere tests werden in der Folge, und derzeit Laufenden test Ergebnis wäre in der Tabellenansicht dargestellt. Ich hielt das hinzufügen von Ergebnis-Klasse für jeden test-Ergebnis. Ich bin verwirrt, wie ich die Daten aktualisieren, die Bindung auf der Grundlage der test ausgeführt wird. Ich wollte nicht, fügen Sie eine select-Anweisung in der Ansicht, um das entsprechende Objekt zu binden - wie dies erforderlich wäre, mich zu aktualisieren, jedes mal, wenn wir einen neuen test. ich dachte, das war nicht ein gutes design. Eine bessere Möglichkeit des Umgangs mit diesen?
Würden Sie wirklich brauchen, verschiedene Klassen für die verschiedenen tests? Könnte Sie aktualisieren Sie Ihren Beitrag, indem ein Beispiel einer solchen Klasse?
InformationsquelleAutor Manoj | 2013-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie eine bindbare dynamisches Wörterbuch. Dadurch werden jeden Wörterbuch-Eintrag als eine Eigenschaft.
Dann können Sie es verwenden, wie diese:
Datagrid-muss benutzerdefinierte code für den Aufbau der Spalten:
XAML:
AutoGeneratedColumns Veranstaltung:
Warum verwenden Sie lokale Variablen
propChange
imRaisePropertyChanged
undnames
imdataGrid1_AutoGeneratedColumns()
?Es gibt keine Anforderung für Sie. Ich denke, ich dachte, Sie machten es besser lesbar an der Zeit.
Einfach Fragen, wenn Sie einfach die änderung-Dictionary Schlüssel Typ von Objekt auf eine Art, die implementiert IPropertyChanged würde nicht dieses Problem lösen? So wird jedes Element verkabelt werden über IPropertyChanged
Auch eine Taste, ändert sich der Wert, während in einem Wörterbuch, ist eine schlechte Idee, also ich bin mir nicht sicher wie das funktionieren würde.
InformationsquelleAutor weston
Basierend auf westons Antwort kam ich auf eine andere Lösung ohne Verwendung einer benutzerdefinierten BindableDynamicDictionary Klasse.
Gibt es eine Klasse namens
ExpandoObject
im namespaceSystem.Dynamic
(die ist Massiv in ASP.NET).Es im Grunde genommen die gleiche Sache wie westons BindableDynamicDictionary mit dem Nachteil, nicht über den index-operator zur Verfügung, da es explizit implementiert die Schnittstelle
IDictionary<string, object>
Beachten Sie, dass der einzige Unterschied hier ist, dass Sie das wirken des
ExpandoObject
zuIDictionary<string, object>
Zugang/Werte hinzufügen oder Eigenschaften über den index-operator.InformationsquelleAutor Thomas Eggemann