Liaison de DataGrid à ObservableCollection & lt; Dictionary & gt;
J'ai un ObservableCollection<Dictionary>
et souhaitez lier à une 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);
Je voulais les clés pour devenir l'en-tête de la DataGrid
et les valeurs de chaque Dictionary
point à la ligne. Réglage de la ItemsSource
ne fonctionne pas.
source d'informationauteur Manoj
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un bindable dictionnaire dynamique. Cela permettra d'exposer chaque entrée du dictionnaire en tant que propriété.
Alors vous pouvez l'utiliser comme ceci:
Datagrid besoins de code personnalisé pour la construction de colonnes:
XAML:
AutoGeneratedColumns événement:
Basé sur weston réponse, je suis venu avec une autre solution sans l'aide d'un custom BindableDynamicDictionary classe.
Il y a une classe appelée
ExpandoObject
dans l'espace de nomsSystem.Dynamic
(qui est très utilisée dans ASP.NET).Il se fait de la même chose que weston BindableDynamicDictionary avec l'inconvénient de ne pas avoir l'index de l'opérateur disponible depuis explicitement implémente l'interface
IDictionary<string, object>
Avis que la seule différence ici est que vous devez jeter le
ExpandoObject
àIDictionary<string, object>
d'accès/ajouter des valeurs de propriétés ou via l'index de l'opérateur.