Как использовать ValueConverter с привязкой данных в Winforms

В WPF легко использовать ValueConverter для форматирования значений и т.д. (в нашем случае конвертировать некоторые числа в другую единицу, например, км до миль)

Я знаю, что это можно сделать в Winforms, но весь мой Googleing просто приводит результаты для WPF и Silverlight.

Ответ 1

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

В противном случае вам нужно прикрепить к Parse и Format события Binding. Это, к сожалению, устраняет использование конструктора для вашей привязки для всех, кроме простейших сценариев.

Например, скажем, вы хотели, чтобы TextBox привязывался к целочисленному столбцу, представляющему километры, и вы хотели визуальное представление в миле:

В конструкторе:

Binding bind = new Binding("Text", source, "PropertyName");

bind.Format += bind_Format;
bind.Parse += bind_Parse;

textBox.DataBindings.Add(bind);

...

void bind_Format(object sender, ConvertEventArgs e)
{
    int km = (int)e.Value;

    e.Value = ConvertKMToMiles(km).ToString();
}

void bind_Parse(object sender, ConvertEventArgs e)
{
    int miles = int.Parse((string)e.Value);

    e.Value = ConvertMilesToKM(miles);
}

Ответ 2

Другой вариант - иметь определенную ViewModel для формы, которая предоставляет данные в формате, который вам нужно отображать в форме. Вы можете легко достичь этого, используя AutoMapper и создав собственный Formatter.

Таким образом, у вас также будет полная поддержка дизайнера.