使用IDataErrorInfo捕获异常

时间:2019-06-28 08:50:21

标签: c# wpf validation exception

我想验证TextBox的输入。我使用IDataErrorInfo接口来做到这一点。当用户输入不正确时,属性ValueIsValid设置为false。但是,我将属性InputValue用于TextInput(它是一个int)。当用户键入“ 1234”时,IDataErrorInfo接口将检查输入是否正确,并在需要时将ValueIsValid设置为false。 但是,当用户键入“ blabla”时,输入未转换为int且未调用IDataErrorInfo接口=> ValueIsValid未设置为false。 当用户在文本框中键入“ blabla”时,如何将ValueIsValid设置为false? 因为我使用MVVM,所以无法从视图模型访问TextBox的validation.hasError属性。

ViewModel:

public class ViewModel : IDataErrorInfo
{
    public bool ValueIsValid { get; set; }

    public string StrErrorMessage
    {
        get { return "Some Error ..."; }
    }

    public int InputValue
    {
        get { return m_inputValue; }
        set
        {
            m_inputValue = value;
            NotifyPropertyChanged();
            ValueIsValid = true;
        }
    }

    protected int m_inputValue;

    public string Error
    {
        get { return null; }
    }

    public string this[string columnName]
    {
        get
        {
            if (columnName == "InputValue")
            {
                if (InputValue == 10)
                {
                    ValueIsValid = false;
                    return "Wrong value in TextBox.";
                }
            }

            return string.Empty;
        }
    }
}

WPF

<TextBox Text="{Binding InputValue, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}">
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="True">
                    <Setter Property="ToolTip" Value="{Binding StrErrorMessage}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

0 个答案:

没有答案