Solo il metodo ConvertTo viene chiamato (un sacco di volte) quando accede al propertygrid. Questo restituisce correttamente "Foo!" stringa nel propertygrid. Quando faccio clic per modificare ottengo un'eccezione Cannot convert object of type Foo to type System.String.
(non esattamente, tradotto). Il metodo ConvertFrom non viene chiamato, nessun indizio perché? E l'errore indica che sta cercando di convertire in una stringa, non da.TypeConverter in propertygrid converte solo da stringa, non in
Penso che quando voglio modificare questo oggetto, deve convertire da Foo a stringa, e una volta terminata la modifica. Classe
StringConverter:
public class FooTypeConverter : StringConverter {
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) {
return new Foo((string) value);
}
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
return "Foo!";
}
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) {
return true;
}
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) {
return true;
}
}
proprietà a cui si accede:
Foo _foo = new Foo();
[Editor(typeof(System.ComponentModel.Design.MultilineStringEditor), typeof(UITypeEditor))]
[TypeConverter(typeof(FooTypeConverter))]
public Foo Foo {
get {
return _foo;
}
set {
_foo = value;
}
}
ho scoperto che ha qualcosa a che fare con la MultilineStringEditor, se rendo invalido questo, funziona correttamente –
Ho appena visto il tuo aggiornamento; dovrai scrivere il tuo editor - 'MultilineStringEditor' ** non ** saprà come elaborare un' Foo', quindi sta dicendo "no", o un'eccezione viene sollevata e gestita. –