【发布时间】:2011-02-08 19:41:10
【问题描述】:
在 WPF 中,很容易使用 ValueConverter 来格式化值等,(在我们的例子中,将一些数字转换为不同的单位,例如公里到英里)
我知道这可以在 Winforms 中完成,但我所有的 Google 搜索都只是为 WPF 和 Silverlight 带来了结果。
【问题讨论】:
标签: winforms data-binding
在 WPF 中,很容易使用 ValueConverter 来格式化值等,(在我们的例子中,将一些数字转换为不同的单位,例如公里到英里)
我知道这可以在 Winforms 中完成,但我所有的 Google 搜索都只是为 WPF 和 Silverlight 带来了结果。
【问题讨论】:
标签: winforms data-binding
如果您能够并且愿意使用自定义属性装饰数据源属性,您可以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);
}
【讨论】:
另一种选择是为表单提供特定的 ViewModel,它以您需要在表单上显示的格式公开数据。您可以通过使用AutoMapper 并构建自己的Formatter 轻松实现它。
这样您也将获得对设计师的全面支持。
【讨论】: