如何在Winforms中使用ValueConverter和数据绑定

时间:2010-04-16 12:27:18

标签: winforms data-binding

在WPF中,很容易使用ValueConverter格式化值等(在我们的例子中,将一些数字转换为不同的单位,例如公里到英里)

我知道它可以在Winforms中完成,但我所有的Googleing只会为WPF和Silverlight带来结果。

2 个答案:

答案 0 :(得分:16)

如果您能够并愿意使用自定义属性修饰数据源属性,则可以use a TypeConverter

否则,您必须附加Parse对象的FormatBinding事件。遗憾的是,除了最简单的场景之外,这使得设计师无需使用绑定。

例如,假设你想要一个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);
}

答案 1 :(得分:5)

另一种选择是为表单创建一个特定的ViewModel,它以您需要在表单上显示的格式公开数据。您可以使用AutoMapper并构建自己的Formatter轻松实现此目标。

这样你也可以完全支持设计师。