2010-04-16 23 views
11

在WPF中很容易使用ValueConverter格式化值等使用ValueConverter与数据绑定,(在我们的情况下将一些号码为不同的单位,例如公里英里)我如何的WinForms

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

+0

相关:http://stackoverflow.com/q/3430217/240733 – stakx 2015-10-04 07:13:22

回答

16

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

否则,您必须附加Binding对象的ParseFormat事件。不幸的是,这不需要使用设计器来绑定除了最简单的场景以外的所有设备。

例如,假设你想绑定到较公里的整列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

值得一提的是,这种技术只会涉及绑定对象被使用和暴露的场景。它不适用于网格和其他复杂的绑定控件,除非它们拥有自己的格式/分析API。因此,不幸的是,在WinForms数据绑定机制中确实没有使用值转换器的“通用”方法。 – Crono 2014-09-10 18:55:58

5

另一种选择是为窗体显示特定的ViewModel,该窗体以需要在窗体上显示的格式显示数据。您可以使用AutoMapper并自行构建您自己的Formatter来轻松实现。

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

相关问题