在WPF中很容易使用ValueConverter格式化值等使用ValueConverter与数据绑定,(在我们的情况下将一些号码为不同的单位,例如公里英里)我如何的WinForms
我知道它可以在Winforms中完成,但我所有的Googleing都只是为WPF和Silverlight带来结果。
在WPF中很容易使用ValueConverter格式化值等使用ValueConverter与数据绑定,(在我们的情况下将一些号码为不同的单位,例如公里英里)我如何的WinForms
我知道它可以在Winforms中完成,但我所有的Googleing都只是为WPF和Silverlight带来结果。
如果您能够并愿意使用自定义属性修饰数据源属性,则您可以use a TypeConverter
。
否则,您必须附加Binding
对象的Parse
和Format
事件。不幸的是,这不需要使用设计器来绑定除了最简单的场景以外的所有设备。
例如,假设你想绑定到较公里的整列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);
}
值得一提的是,这种技术只会涉及绑定对象被使用和暴露的场景。它不适用于网格和其他复杂的绑定控件,除非它们拥有自己的格式/分析API。因此,不幸的是,在WinForms数据绑定机制中确实没有使用值转换器的“通用”方法。 – Crono 2014-09-10 18:55:58
另一种选择是为窗体显示特定的ViewModel,该窗体以需要在窗体上显示的格式显示数据。您可以使用AutoMapper并自行构建您自己的Formatter来轻松实现。
这样你也可以完全支持设计师。
相关:http://stackoverflow.com/q/3430217/240733 – stakx 2015-10-04 07:13:22