如果值错误,如何清除设置器中的文本框?

时间:2019-03-28 11:13:21

标签: c# wpf mvvm setter

我有一个文本框,其文本属性绑定在字段ItemCount上。如果我得到错误的值,我会尝试清除它。但是texbox不清楚。请帮帮我。我怎么了?

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: 我自己解决了这个问题。我将检查放入尝试catch构造中,并在viewmodel实现的catch中使“ _ItemCount = null”。因此,它现在可以完美运行。

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();
            }
        }
    }

0 个答案:

没有答案