2008-09-22 7 views
1

J'ai une grille de propriétés en C#, en chargeant un objet 'PropertyAdapter' (une enveloppe de base autour d'un de mes objets affichant les propriétés appropriées avec les balises appropriées)Objet de grille de propriétés échouant dans la zone de liste déroulante mais OK lorsque la zone de liste déroulante ou double clic

J'ai un TypeConverter sur l'une des propriétés (type de données, qui renvoie une énumération des valeurs possibles) que je veux limiter les valeurs disponibles à la grille de la propriété en décimal et entier, avec les 2 méthodes comme suit

public override bool GetStandardValuesSupported(ITypeDescriptorContext context) 
{ 
    return true; 
} 

public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) 
{ 
    return new StandardValuesCollection(new List<Constants.DataTypes>() { Constants.DataTypes.Decimal, Constants.DataTypes.Integer }); 
} 

Ceci est affiché comme je le veux sur la grille de la propriété, et quand je double-cliquez le champ de propriété dans la grille de propriété, il bascule heureusement entre Integer et Decimal. De même, je peux utiliser la roulette de la souris pour faire défiler les options de la liste déroulante de la propriété.

Si j'utilise cependant le domaine de la propriété comme une zone de liste déroulante et sélectionnez une valeur dans le menu déroulant, je reçois la case d'erreur standard de la grille de la propriété avec l'erreur:

Object of type 'System.String' cannot be converted to type 'Pelion.PM3.Utils.Constants+DataTypes'.

Je suppose que je peux utiliser le convertisseur remplace dans le convertisseur de type pour les piéger et les convertir en un énumération de types de données, mais pourquoi la grille de propriété échouerait-elle quand je sélectionne de la liste déroulante au lieu de double cliquer ou «mouseewheeling» sur la liste déroulante?

Répondre

3

Lorsque cette option est sélectionnée dans la liste déroulante, la valeur est renvoyée sous forme de chaîne. Je ne suis pas sûr de savoir pourquoi, mais j'ai déjà vu cela avant. Je pense que le fait de cliquer deux fois ou de faire défiler la molette modifie les valeurs de la collection de valeurs, tandis que la sélection dans la liste déroulante revient à modifier la valeur du champ sous la forme d'une chaîne. Ensuite, vous avez la convertir la valeur d'une chaîne à la valeur enum.