2011-01-19 5 views
1

Voici ma configuration. Je les classes suivantes BusinessObjectLiaison DataGrid Type problème

BaseClass 
InheritClassA : BaseClass 
InheritClassB : BaseClass 
InheritClassC : BaseClass 

J'ai aussi le dictionnaire suivant

Dictionary<classType is a String, ObservableCollection<BaseClass>> 

Je veux pouvoir, dans mon convertisseur, la base du type d'objet que je sélectionne, retourner le ObservableCollection approprié donc je peux le lier à mon DataGrid et autoGenerateColumn pour que je puisse voir toutes mes propriétés sur la grille. Cependant, lorsque je récupère ma collection en tant que BaseClass, elle ne montre que les colonnes de la classe de base. Je pense que c'est parce que le Type pour ObservableCollection est le type de baseClass et n'est pas spécifique à InheritClassA/InheritClassB/InheritClassC

Y at-il un moyen de créer dynamiquement un type ObservableCollection? Je peux donc créer ObservableCollection et lui assigner des valeurs casted?

Existe-t-il un moyen approprié de le lier à ma grille de données afin que je puisse voir les propriétés de la classe héritée?

Merci beaucoup,

Répondre

1

Créer un dictionnaire qui a la valeur de type un Object et non un BaseClass. Ensuite, vous pouvez ajouter le béton ObservableCollection<InheritClass[A,B,C]> et la liaison fonctionnera comme vous attendez:

Dictionary<classType is a String, ObservableCollection<object>> 

Si vous voulez être plus restrictive, déclare comme Dictionary<string,IEnumerable>