29
avril
2007
Un bug sur le DataBinding
avril
2007
Imaginons le cas suivant :
public interface I1
{
}
public class C1 : I1
{
}
public class MyClass
{
private C1 _classProp = new C1();
public C1 ClassProp
{
get { return _classProp; }
set { _classProp = value; }
}
}
public class MyControl : ComboBox
{
private I1 _ctrlProp;
public I1 CtrlProp
{
get { return _ctrlProp; }
set { _ctrlProp = value; }
}
}
{
}
public class C1 : I1
{
}
public class MyClass
{
private C1 _classProp = new C1();
public C1 ClassProp
{
get { return _classProp; }
set { _classProp = value; }
}
}
public class MyControl : ComboBox
{
private I1 _ctrlProp;
public I1 CtrlProp
{
get { return _ctrlProp; }
set { _ctrlProp = value; }
}
}
Je veux binder MyClass.ClassProp avec MyControl.CtrlProp.
myControl1.DataBindings.Add("CtrlProp", new MyClass(), "ClassProp");
Le code suivant génère une Format Exception à l’exécution : « Cannot format the value to the desired type. »
La seule solution que j’ai trouvé est de passer par un une propriété de type Object sur mon contrôle qui ne fait qu’encapsuler CtrlProp.
public class MyControl : ComboBox
{
private I1 _ctrlProp;
public I1 CtrlProp
{
get { return _ctrlProp; }
set { _ctrlProp = value; }
}
public object CtrlPropObj
{
get { return CtrlProp; }
set { CtrlProp = value as C1; }
}
}
{
private I1 _ctrlProp;
public I1 CtrlProp
{
get { return _ctrlProp; }
set { _ctrlProp = value; }
}
public object CtrlPropObj
{
get { return CtrlProp; }
set { CtrlProp = value as C1; }
}
}
et de binder MyClass.ClassProp avec MyControl.CtrlPropObj
myControl1.DataBindings.Add("CtrlPropObj", new MyClass(), "ClassProp");
Petite précision : si I1 est une classe (au lieu d’une interface), ça marche.