捕获文本框的无效输入并使用自定义转换器

时间:2014-12-18 14:18:05

标签: c# wpf data-binding converter

我目前正在C#中创建一个带有德国市场文本框的WPF用户界面。

我在Text Box文本和Double Value之间创建了一个Data绑定。

<TextBox Text="{Binding Path=Length, Mode=TwoWay}"/>

如果我进入&#34; 10.4&#34;它将保存双值10,4

如果我进入&#34; 10,4&#34;它将保存双值104.0

如果我输入&#34; asd&#34;它不会保存任何内容,但会在文本框周围加上红色高亮显示。

我希望这个盒子可以接受两种方式&#34;,&#34;和&#34;。&#34;并平等对待他们。

因此我使用了转换器 (我从这里得到:https://social.msdn.microsoft.com/Forums/de-DE/b3a5a9ba-0ebe-4a8a-9e34-f32e9545c941/kommazahlen-im-datagrid

Converter={StaticResource DoubleConverter}, ConverterCulture=de-de,添加到XAML

public class DoubleConverter : System.Windows.Data.IValueConverter
{

    #region IValueConverter Member

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return double.Parse(value.ToString().Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture);
    }

    #endregion
}

&#34;,&#34;和&#34;。&#34;问题现在已经解决,但是&#34; asd&#34;案件已经改变。我得到一个例外,红色方块消失了。

如何将这两种行为结合起来?

由于 卡尔

1 个答案:

答案 0 :(得分:1)

string input = value.ToString().Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture);
double number;
bool result = Double.TryParse(input , out number);
if (result)
{
    return number;         
}
else
{
    return input;
}