C# 使用不变量区域性绑定十进制值
我有一个绑定到十进制属性的C# 使用不变量区域性绑定十进制值,c#,wpf,binding,decimal,culture,C#,Wpf,Binding,Decimal,Culture,我有一个绑定到十进制属性的文本框 我们的要求是拥有一种不变性的文化行为 当用户键入6.30时,该值需要为6,30 如果用户键入6,30,则值需要为6,30 当前,当使用点时,绑定将值设置为630 这可能吗?您的需求实际上不是不变量文化的行为。您希望允许用户键入两种形式的数字,小数点可以是或,。这种动态表达式当然需要一些自定义的转换器。尝试此自定义转换器: public class MultiCultureNumberConverter : IValueConverter { public
文本框
我们的要求是拥有一种不变性的文化
行为
当用户键入6.30
时,该值需要为6,30
如果用户键入6,30
,则值需要为6,30
当前,当使用点时,绑定将值设置为630
这可能吗?您的需求实际上不是
不变量文化的行为。您希望允许用户键入两种形式的数字,小数点可以是
或,
。这种动态表达式当然需要一些自定义的转换器。尝试此自定义转换器:
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;
}
}
我在这方面遇到了很多问题,所以我大部分时间都是自己检查,最简单的方法是在textbox上为textchanged订阅一个事件,然后执行以下操作textbox1.Text=textbox1.Text.Replace('.',',')@Vajura-如果有人分别输入123456.78
或123.456,78
(在不同的文化中都是123456.78
),该怎么办?@Vajura这对我来说是不可能的,因为我使用WPF绑定。它的工作方式与winforms完全不同。有了它(),我希望它能在6.30
中正常工作(如:类似预期),但现在6,30
不会变成630
?看起来OP正在寻找一种方法来使用两个不同的十进制分隔符,据我所知,这并不容易。我得到一个名称“CultureInfo”不存在于名称空间“clr名称空间:System.Globalization;assembly=System.Globalization”
error@Corak你说得对,我只是太专注于他的要求,将区域设置为不变量区域
,而在这种区域中,它应该始终显示
为
。@DeMama不确定怎么会出现这样的错误,我先尝试了我这边的代码。无论如何,这确实设置了区域性,但对您的需求没有帮助(总是将
显示为,
)。非常好@KingKing!谢谢