Преобразователь типов и привязка данных

У меня возникли проблемы с решением проблемы, связанной с преобразованием между радианами и углами (TypeConverter).

В Win Forms у меня есть TextBox с привязкой к свойству AngleX класса «Треугольник».

Мое свойство хранит значение в радианах, но я хотел бы показать пользователю в угловом формате, и если пользователь изменит его в пользовательском интерфейсе, мне нужно вернуть его классу в радианах.

На данный момент у меня есть этот код:

public RadAngleConverter : TypeConverter
{
   public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
    {
        return destinationType == typeof(Int64);
    }

    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        return  Math.PI * (Int64)value / 180.0;
    }

    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        return sourceType == typeof(Int64);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        return (Int64)value * (180.0 / Math.PI);             
    }
}

В моем классе "Треугольник" у меня есть этот код:

public class Triangle()
{
...
        [TypeConverter(typeof(RadGrausFormat))] 
        public double AngleX { get; set; }
...
}

Наконец, в пользовательском интерфейсе этот код:

...
 TextBox1.DataBindings.Add("Text",instanceClass,"AngleX",formattingEnable: true)
...

Но это не работает!

Кто-нибудь может помочь мне с этим?


person Rafael    schedule 18.07.2017    source источник
comment
Возможный дубликат TypeConverter для свойства объекта Type   -  person Ben    schedule 18.07.2017
comment
Поставьте точку останова на return destinationType == typeof(Int64); и проверьте аргументы. Я предполагаю, что он пытается преобразовать в строку, а не в Int64.   -  person Ben    schedule 18.07.2017
comment
Программа не идет к этому моменту. Я не могу его отладить.   -  person Rafael    schedule 18.07.2017
comment
Хорошо, что я бы сделал, это создал второе свойство с AngleXDegrees и вместо этого привязал его к нему. public double AngleXDegrees { get {return AngleX * DegreesPerRadian;}} тогда можете продолжать свой день!   -  person Ben    schedule 18.07.2017