Propriété Grid Object échouant lors de la sélection d'une zone de liste déroulante, mais OK lorsque la liste déroulante fait défiler ou double-clique

StackOverflow https://stackoverflow.com/questions/113644

  •  02-07-2019
  •  | 
  •  

Question

J'ai une grille de propriétés en C # qui charge un objet 'PropertyAdapter' (un wrapper de base autour de l'un de mes objets affichant les propriétés pertinentes avec les balises appropriées)

J'ai un TypeConverter sur l'une des propriétés (DataType, qui renvoie une énumération de valeurs possibles) car je souhaite limiter les valeurs disponibles à la grille de propriétés à Decimal et Integer, avec les 2 méthodes suivantes

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 });
}

Cela s’affiche exactement comme je le souhaite sur la grille de propriétés. Lorsque je double-clique sur le champ de propriété de la grille de propriétés, il bascule entre Integer et Decimal. De même, je peux utiliser la molette de la souris pour faire défiler les options de la liste déroulante des propriétés.

Si j’utilise toutefois le champ de propriété comme zone de liste déroulante et que je sélectionne une valeur dans le menu déroulant, j’obtiens la boîte d’erreur standard de la grille de propriétés avec le message d'erreur:

  

Un objet de type 'System.String' ne peut pas   être converti en dactylographie   'Pelion.PM3.Utils.Constants + DataTypes'.

Je suppose que je peux utiliser les substitutions de convertisseur dans le convertisseur de type pour les intercepter et les convertir en un Enum of DataTypes, mais pourquoi la grille de propriétés échoue-t-elle lorsque je sélectionne dans la liste déroulante au lieu de double-cliquer ou de faire défiler la souris 'sur la liste déroulante?

Était-ce utile?

La solution

Lorsque cette option est sélectionnée dans la liste déroulante, la valeur est renvoyée sous forme de chaîne. Je ne sais pas pourquoi, mais je l’ai déjà vu auparavant. Je pense que, fondamentalement, un double clic ou un défilement de la molette de la souris modifie les valeurs de la collection de valeurs, alors que sélectionner dans le menu déroulant revient à éditer la valeur du champ sous forme de chaîne. Ensuite, vous devez convertir la valeur d'une chaîne en valeur enum.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top