У меня есть вид, в котором я должен иметь возможность вводить двойные числа. Дело в том, что я могу вводить только целые числа, такие как «100», но не «100.4». Все мои фоновые расчеты выполняются на удвоениях.
Сейчас я пытаюсь обойти эту проблему путем реализации StringToDoubleConverter, но мои знания C # по-прежнему очень ограничены.
Я внедрил это в мой UserControl.Resources
тег
<local:StringToDoubleConverter x:Key="StringToDouble"/>
и создал новый класс StringToDoubleConverter:
class StringToDoubleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string stringNumber = value as string;
double.TryParse(stringNumber, out double val);
return val;
}
}
Наконец-то я реализовал конвертер в моей привязке:
<TextBox Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DelayModel.DelayTime, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource StringToDouble}}"/>
Мой DelayTime
в моем DelayModel
выглядит так:
private double _delayTime;
public double DelayTime
{
get
{
return _delayTime;
}
set
{
if (value != _delayTime)
{
_delayTime = value; NotifyPropertyChanged();
}
}
}
Я знаю, что мой конвертер как-то не так. Я изо всех сил пытаюсь получить правильный код для преобразования строки, которую я хочу ввести в моем представлении, в удвоенные значения.
Например: я хочу ввести «0,7» в свой просмотр, и DelayTime
должен получить «0,7», а не только «7». Является ли TryParse oder double.Parse (значение) правильным?