Как разрешить строке начинаться с "."десятичная точка, используя конвертер значений - PullRequest
0 голосов
/ 09 октября 2019

Невозможно добавить "."десятичная точка на строку с использованием IValueConverter. В настоящее время пользователь должен ввести «0. ##». Я хотел бы, чтобы пользователь мог вводить «. ##» в поле ввода в пользовательском интерфейсе (xaml), который связан с преобразователем значений, показанным в приведенном ниже коде.

Различные конфигурации преобразователя значений

открытый класс DecimalCommaDisplayConverter: IValueConverter {открытый объект Convert (значение объекта, тип targetType, параметр объекта, System.Globalization.CultureInfo culture) {if (value == null ||! (значение десятичное)) throw new ArgumentException («Этот преобразователь может использоваться только для значений типа decimal.»);

    var decimalValue = (decimal)value;

    //In the UI represent 0 as empty string.
    if (decimalValue == default)
    {
        return string.Empty;
    }

    //Format the string with maximum of 4 decimal places and commas as appropriate.
    // Examples: 0.23, 1.2, 1,234.5678
    return decimalValue.ToString("#,0.####");
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    if (value != null && !(value is string)) throw new ArgumentException("This converter may only be used on values of type string.");

    string stringValue = (string)value;

    //In the UI, 0 is represented as an empty string.
    if (string.IsNullOrEmpty(stringValue))
    {
        return 0.0m;
    }

    if(decimal.TryParse((stringValue).Replace(",", ""), out decimal result))
    {
        return result;
    }

    //If the value isn't convertable, then just return it and let the TextChanged handler convert it back.
    return stringValue;
}

при вводе значения в поле ввода в пользовательском интерфейсе. Я хотел бы, чтобы пользователь мог вводить ". ##", а не "0. ##" для простоты использования. В настоящее время пользователь должен ввести «0» с заполнителем или без него.

...