Проблемы с вводом двойных значений в представлении из-за неиспользования строк? - PullRequest
0 голосов
/ 03 января 2019

У меня есть вид, в котором я должен иметь возможность вводить двойные числа. Дело в том, что я могу вводить только целые числа, такие как «100», но не «100.4». Все мои фоновые расчеты выполняются на удвоениях. Есть ли легкое исправление?

Вид:

<TextBox Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" Grid.RowSpan="2" 
                     Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DelayModel.DelayTime, UpdateSourceTrigger=PropertyChanged}"/>

Модель:

    private double _delayTime;

    public double DelayTime
    {
        get
        {
            return _delayTime;
        }
        set
        {
            if (value != _delayTime)
            {
                _delayTime = value; NotifyPropertyChanged();
            }
        }
    }

Другая модель, которая использует delayTime:

public double TotalAxisTime
        {
            get
            {
                double positioningTime = 0.0;
                double delayTime = 0.0;

                foreach (var block in BlockList)
                {
                    if (block is PositioningModel)
                    {
                        positioningTime = positioningTime + ((PositioningModel)block).PositioningTime;
                    }

                    if (block is DelayModel)
                    {
                        delayTime = delayTime + ((DelayModel)block).DelayTime;
                    }
                }
                return (positioningTime + delayTime);
            }
        }

(PositioningTime - еще одно двойное значение, которое мне, вероятно, нужно преобразовать в строки.

Я изо всех сил пытаюсь реализовать метод Convert.ToString (). Это правильный подход? Должен ли я использовать специальные конвертеры в XAML? Что-то вроде StringToDoubleConverter с IValueConverter?

Любой совет поможет. Заранее спасибо.

1 Ответ

0 голосов
/ 03 января 2019

Вот один быстрый способ справиться с этим.Не самый подходящий, и конвертер, вероятно, будет лучше.

public string DelayTimeText
{
    get
    {
        return _delayTimeText;
    }
    set
    {
        _delayTimeText = value; NotifyPropertyChanged();
    }
} 

public double DelayTime
{
    get
    {
        if (double.TryParse( DelayTimeText, out double val ));
        _delayTime = val;

        return _delayTime;
    }
}

Вместо этого вы будете привязывать свойство Text, и ваши вычисления будут опираться на TryParse, который будет возвращаться к предыдущему значению.если не удается разобрать.

...