我有ObservableCollection
填充数据网格DGCommands
,以及一些文本框' Text
属性定义如下:
Text="{Binding SelectedItem.Costs,
Mode=TwoWay,
ElementName=DGCommands,
UpdateSourceTrigger=PropertyChanged}"
好的,现在当我从其中一个文本框中解析一个double值时,例如:
bool costs_valid = double.TryParse(txtboxCosts.Text, out _costs) // 1,8 i get 18;
我试图用这种方法解决问题,但我不确定它是否是最好的解决方案:
public static double DoubleParseCostum(string val)
{
double res = 0;
bool res_valid = double.TryParse(val, out res);
if (val.ToString().Contains(_DECIMAL_)) return res;
else
{
if ("." != _DECIMAL_ && val.Contains(".")) return double.Parse(val.Replace(".", _DECIMAL_));
if ("," != _DECIMAL_ && val.Contains(",")) return double.Parse(val.Replace(",", _DECIMAL_));
}
return res;
}
哪里
_DECIMAL_ = Convert.ToChar(System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator).ToString();
编辑:
将标题从" 解析字符串更改为double赋予Int "对于当前的问题,因为真正的问题在于绑定而不是解析,因为当我想要将1.8更改为1.8时,我会因失去焦点而得到18。
答案 0 :(得分:2)
试试这个:double.Parse("1.8", CultureInfo.InvariantCulture)
答案 1 :(得分:2)
这是一个长镜头......我想知道你实际上试图解决的基本问题(没有意识到)是否所有WPF应用程序都默认使用" EN-US"语言环境。您可以通过执行以下操作在启动应用程序时解决此问题:
FrameworkElement
.LanguageProperty
.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag)));
答案 2 :(得分:1)
我终于找到了一个解决方案,就像@Richardissimo所说的那样,WPF默认使用'en-US'文化,然后将逗号(,)视为千分隔符,而不是小数符号。所以我将ConverterCulture属性设置为使用系统的默认文化:
<TextBox Name="txtboxCosts" Style="{StaticResource txtboxDefault2}"
xmlns:gl="clr-namespace:System.Globalization;assembly=mscorlib"
Text="{Binding SelectedItem.proCosts,
Mode=TwoWay,
ElementName=DGCommands,
StringFormat={}{0:N2},
UpdateSourceTrigger=PropertyChanged,
ConverterCulture={x:Static gl:CultureInfo.CurrentCulture}}"/>