При очистке текстового поля в интерфейсе конвертер не запускается - PullRequest
0 голосов
/ 12 октября 2018

Когда я добавляю значение или изменяю его в текстовом поле, конвертер срабатывает каждый раз.Когда я удаляю / сбрасываю значение, преобразователь никогда не срабатывает.Также после сохранения пустого поля он фактически сохраняет значение, которое было там ранее.

<TextBox Text="{Binding FemaleCT, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" PreviewTextInput="NumberValidationTextBox" VerticalContentAlignment="Center" TextAlignment="Center" Width="100">
      <TextBox.Background>
          <MultiBinding Converter="{StaticResource inToleranceHighlightsConverter}">
               <Binding Path="FemaleCT"></Binding>
               <Binding ElementName="MF" Path="Text"></Binding> 
               <Binding ElementName="MF_LowTolerance" Path="Text"></Binding>
               <Binding ElementName="MF_HighTolerance" Path="Text"></Binding>
               <Binding ElementName="SampleEnabled" Path="Text"></Binding>
          </MultiBinding>
    </TextBox.Background>
</TextBox>

Это может быть важно, значение данных FemaleCT является десятичным значением, допускающим обнуление, и является частью ObservableCollection.

public ObservableCollection<MouldCTModel> ctMeasurements
    {
        get { return _ctMeasurements; }
        set { _ctMeasurements = value; this.RaisePropertyChanged(nameof(ctMeasurements)); CanSignScreen(); }
    }

Это нормальное поведение или я что-то не так делаю?

1 Ответ

0 голосов
/ 12 октября 2018

Ваша проблема - привязка десятичного числа к строковому свойству.string.empty не может быть преобразован в десятичное число, поэтому привязка не выполняется и свойство не обновляется.Поскольку свойство не изменяется, конвертер не запускается, и объект по-прежнему имеет старое значение.

Я считаю, что лучше всего переносить числа, даты и т. Д. В свойствах строки:

    private string femaleCT;

    public string FemaleCT
    {
        get
        {
            return this.femaleCT;
        }

        set
        {
            this.femaleCT = value;

            decimal temp;
            if (decimal.TryParse(value, out temp))
            {
                this.model.FemaleCT = temp;
            }

            this.NotifyPropertyChanged();
        }
    }

, а затем запишите преобразователь для получения строки, и он может решить, что делать, если строка пуста или иным образом не является допустимым значением.

Этот метод также позволяет проверять значение строки.Проверка модели недостаточна, поскольку она обновляется только в том случае, если значение является допустимым числом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...