0

我有一个用来四舍五入的转换器。它看起来像这样:

public class RoundNumberConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (!value.IsNumber())
            return DependencyProperty.UnsetValue;

        return Math.Round((float)value, 2).ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        float number;
        if (float.TryParse(value.ToString(), out number))
            return number;
        return DependencyProperty.UnsetValue;
    }
}

这工作正常,直到我将 UpdateTrigger 切换到 PropertyChanged。现在,当我尝试输入值 1.23 时,1 字符按预期工作,但是当我输入句点时,1. 被转换为 1.0,并且由于该值没有改变,它没有在我的视图模型中设置。另外,1.在文本框中显示时会转换为字符串1,所以用户不能加句点。有没有人有一个简单的方法来解决这个问题?

4

1 回答 1

0

我通过这样做来修复它:

public class RoundNumberConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (!value.IsNumber())
            return DependencyProperty.UnsetValue;

        return Math.Round((float)value, 2).ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
            return DependencyProperty.UnsetValue;

        var svalue = value.ToString();
        if (svalue.EndsWith(".")) // Prevents problems when using this with UpdateTrigger.PropertyChanged and user enters 1.
            return DependencyProperty.UnsetValue;

        float number;
        if (!float.TryParse(svalue, out number))
            return DependencyProperty.UnsetValue;

        return number;
    }
}
于 2013-10-21T20:54:20.620 回答