将double值绑定到文本框

时间:2018-02-24 01:11:13

标签: c#

我有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。

3 个答案:

答案 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}}"/>