Как очистить текстовое поле в установщике, если значение неверно? - PullRequest
1 голос
/ 28 марта 2019

У меня есть текстовое поле со свойством text, привязанным к полю ItemCount. И я пытаюсь очистить это, если я получил неправильное значение. Но texbox не очищает. Помоги мне, пожалуйста. В чем моя ошибка?

TextBox в xaml:

<TextBox Margin="5 15">
     <TextBox.Text>
          <Binding Path="ItemCount" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <ExceptionValidationRule/>
                </Binding.ValidationRules>
          </Binding>
      </TextBox.Text>
</TextBox>

Реализация привязки в viewmodel:

private int? _ItemCount;
        public int? ItemCount
        {
            get { return _ItemCount; }
            set
            {
                if (value != _ItemCount)
                {
                    if (value < 0)
                    {
                        _ItemCount = null;
                        throw new ApplicationException("Количество пластин не может быть отрицательным");

                    }
                    else if (value > ItemAmount)
                    {
                        _ItemCount = null;
                        throw new ApplicationException("Количество пластин не может превышать остаток");
                    }
                    else
                    {
                        _ItemCount = value;
                    }
                    NotifyPropertyChanged();
                }
            }
        }

UPD: Я решил эту проблему самостоятельно. Я поместил свои проверки в конструкцию try catch и сделал "_ItemCount = null" в catch в реализации viewmodel. Итак, теперь он работает отлично.

private int? _ItemCount;
    public int? ItemCount
    {
        get { return _ItemCount; }
        set
        {
            if (value != _ItemCount)
            {
                try
                {
                    if (value < 0)
                    {
                        throw new ApplicationException("Количество пластин не может быть отрицательным");
                    }
                    else if (value > ItemAmount)
                    {
                        throw new ApplicationException("Количество пластин не может превышать остаток");
                    }
                    else
                    {
                        _ItemCount = value;
                    }
                }
                catch (ApplicationException)
                {
                    MessageBox.Show("kek");
                    _ItemCount = null;
                }
                NotifyPropertyChanged();
            }
        }
    }
...