如何清除INofityDataErrorInfo生成的错误

时间:2017-02-01 09:36:20

标签: wpf mvvm inotifydataerrorinfo

说,我有一个字段Email,我希望在用户输入时显示RegEx errors。但它是一个可选字段,因此如果用户提交表单,则应清除此字段任何错误,都应发送null值。

我已在INofityDataErrorInfo中实施了ViewModel界面。

1 个答案:

答案 0 :(得分:0)

如果您已正确实施INotifyDataErrorInfo界面,则应该能够举起ErrorsChanged事件,并确保GetErrors方法返回null Email 1}} property:

...
private readonly Dictionary<string, ICollection<string>> _validationErrors = new Dictionary<string, ICollection<string>>();

public string Email { get; set; }

public void Submit()
{
    if (_validationErrors.ContainsKey(nameof(Email)))
        _validationErrors.Remove(nameof(Email));

    RaiseErrorsChanged(nameof(Email));
    ...
}

public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
private void RaiseErrorsChanged(string propertyName)
{
    if (ErrorsChanged != null)
        ErrorsChanged(this, new DataErrorsChangedEventArgs(propertyName));
}

public System.Collections.IEnumerable GetErrors(string propertyName)
{
    if (string.IsNullOrEmpty(propertyName)
        || !_validationErrors.ContainsKey(propertyName))
        return null;

    return _validationErrors[propertyName];
}

public bool HasErrors
{
    get { return _validationErrors.Count > 0; }
}

当您举起GetErrors事件时,运行时将调用ErrorsChanged方法。