我有model3
绑定到TextBox
类型的属性。因为我希望文本字段中的值以两个小数点显示(例如3.15),所以我已按如下方式实现了绑定:
decimal
Binding bindDecimal = new Binding("Text", viewModel, "myDecimal");
bindDecimal.Format += FormatDecimal;
bindDecimal.Parse += ParseDecimal;
函数,所以有趣的部分是.Format
函数,它的实现如下:
.Parse
哪个有效,只要价值是合法的。如果我开始使用字母或(更现实地)将字段留空,则返回 System.FormatException ,因为它无法将值转换为小数。问题的一个转折点是,当private void ParseDecimal(object sender, ConvertEventArgs e)
{
if (e.DesiredType != typeof(decimal)) return;
e.Value = Decimal.Parse(e.Value.ToString(), NumberStyles.Number);
}
为空时,如果关闭窗体窗口也会出现这种情况。
避免此异常的最佳方法是什么?
此外,如果它有任何区别,这里是TextBox
函数:
.Format
答案 0 :(得分:1)
您应该使用decimal.TryParse()
:
private void ParseDecimal(object sender, ConvertEventArgs e)
{
if (e.DesiredType != typeof(decimal)) return;
Decimal bob;
Decimal.TryParse(e.Value.ToString(), NumberStyles.Number, new CultureInfo.CurrentCulture, out bob)
// set e.Value to bob regardless of whether a true of false is returned
// if true bob holds the parsed value.
// if false bob holds the default value for decimal (zero), which you probably want to use
e.Value = bob;
}
答案 1 :(得分:1)
private void ParseDecimal(object sender, ConvertEventArgs e)
{
if (e.DesiredType != typeof(decimal)) return;
Decimal bob;
if (Decimal.TryParse(e.Value.ToString(), NumberStyles.Number, new CultureInfo.CurrentCulture, out bob);
{
e.Value = bob;
}
}