Proprietà griglia Oggetto non riuscito nella selezione della casella combinata ma OK quando la casella combinata scorreva o faceva doppio clic
-
02-07-2019 - |
Domanda
Ho una griglia di proprietà in C #, che carica un oggetto "PropertyAdapter" (un wrapper di base attorno a uno dei miei oggetti che mostra proprietà pertinenti con i tag appropriati)
Ho un TypeConverter su una delle proprietà (DataType, che restituisce un elenco di possibili valori) in quanto desidero limitare i valori disponibili alla griglia delle proprietà su Decimale e Intero, con i 2 metodi come segue
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 });
}
Viene visualizzato esattamente come lo voglio sulla griglia delle proprietà e quando faccio doppio clic sul campo delle proprietà nella griglia delle proprietà, cambia felicemente tra Integer e Decimal. Allo stesso modo posso usare la rotellina del mouse per scorrere le opzioni nella casella combinata della proprietà archiviata.
Se tuttavia utilizzo il campo della proprietà come casella combinata e seleziono un valore dall'elenco a discesa, visualizzo la casella di errore della griglia della proprietà standard con l'errore:
L'oggetto di tipo 'System.String' non può essere convertito in tipo 'Pelion.PM3.Utils.Constants + DataTypes'.
Suppongo di poter utilizzare le sostituzioni del convertitore nel convertitore di tipi per intrappolarle e convertirle in un Enum of DataTypes, ma perché la griglia delle proprietà fallirebbe quando seleziono dal menu a discesa invece di fare doppio clic o 'mouseewheeling "sul menu a discesa?
Soluzione
Se selezionato dalla casella combinata a discesa, il valore viene restituito come stringa. Non sono sicuro del perché, ma l'ho già visto accadere prima. Penso che fondamentalmente il doppio clic o lo scorrimento della rotellina del mouse cambi i valori dalla raccolta di valori, mentre la selezione dal menu a discesa è come modificare il valore del campo come una stringa. Quindi, hai il valore convertito da una stringa al valore enum.