使用InvariantCulture绑定十进制值
本文关键字:十进制 绑定 InvariantCulture 使用 | 更新日期: 2023-09-27 18:28:03
我有一个绑定到十进制属性的TextBox
。
我们的要求是具有InvariantCulture
行为。
当用户键入6.30
时,该值需要为6,30
如果用户键入6,30
,则该值需要为6,30
当前,当使用点时,绑定会将值设置为630
。
这可能吗?
您的需求实际上不是InvariantCulture
的行为。您希望允许用户键入两种形式的数字,小数点为.
或,
。这种动态表达式当然需要一些自定义转换器。试试这个自定义转换器:
public class MultiCultureNumberConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
var ci = System.Globalization.CultureInfo.InvariantCulture.Clone()
as System.Globalization.CultureInfo;
ci.NumberFormat.NumberDecimalSeparator = ",";
return ((decimal)value).ToString(ci);
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
var ci = System.Globalization.CultureInfo.InvariantCulture.Clone() as
System.Globalization.CultureInfo;
var s = System.Convert.ToString(value);
decimal d;
if (decimal.TryParse(s, System.Globalization.NumberStyles.Number
^ System.Globalization.NumberStyles.AllowThousands, ci, out d))
{
return d;
}
else
{
ci.NumberFormat.NumberDecimalSeparator = ",";
if (decimal.TryParse(s, System.Globalization.NumberStyles.Number
^ System.Globalization.NumberStyles.AllowThousands, ci, out d))
return d;
}
return Binding.DoNothing;
}
}