문제

내 수업에서 나는 구현하고있다 INotifyDataErrorInfo 유효성 검사 오류가 발생하면 잘 작동합니다. 텍스트 상자 주위에 빨간색 프레임을 넣고 있지만 유효성 검사 오류가 수정 될 때는 제거되지 않습니다.

내 코드는 다음과 같습니다.

    string IDataErrorInfo.this[string columnName]
    {
        get
        {
            string error = null;
            if (Context != null)
            {
                var messages = //GetMessages(); messages are validation errors
                if (messages.Count != 0)
                {
                    error = "This is critical error. Must be fixed";
                    AddError(columnName, "Some kind of error happend", false);
                }
                else
                {
                    RemoveError(columnName);
                }
            }
            return error;
        }
    }

    //I call this method to check for validation errors.
    public void CheckValidationErrors(string propertyName)
    {
        var error = this as IDataErrorInfo;
        string message = error[propertyName];

    }


    private Dictionary<String, List<String>> errors =
        new Dictionary<string, List<string>>();

    public void AddError(string propertyName, string error, bool isWarning)
    {
        if (!errors.ContainsKey(propertyName))
            errors[propertyName] = new List<string>();

        if (!errors[propertyName].Contains(error))
        {
            if (isWarning) errors[propertyName].Add(error);
            else errors[propertyName].Insert(0, error);
            RaiseErrorsChanged(propertyName);
        }
    }

    public void RemoveError(string propertyName, string error="")
    {
        if (error == "")
        {
            errors.Remove(propertyName);
            RaiseErrorsChanged(propertyName);
        }
        else
        {
            if (errors.ContainsKey(propertyName) &&
                errors[propertyName].Contains(error))
            {
                errors[propertyName].Remove(error);
                if (errors[propertyName].Count == 0) errors.Remove(propertyName);
                RaiseErrorsChanged(propertyName);
            }
        }
    }

    public void RaiseErrorsChanged(string propertyName)
    {
        if (ErrorsChanged != null)
            ErrorsChanged(this, new DataErrorsChangedEventArgs(propertyName));
    }


    public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;

    public System.Collections.IEnumerable GetErrors(string propertyName)
    {
        if (String.IsNullOrEmpty(propertyName) ||
            !errors.ContainsKey(propertyName)) return null;
        return errors[propertyName];
    }

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

오류를 제거하기 위해 removeError () 메소드를 호출하고 있습니다. 내가 뭔가 잘못하고 있습니까? 유효성 검사가 수정되면 TextBox로 이동하여 탭을 처리해야합니다. 유효성 검사 오류가 발생하면 바로 빨간색 프레임을 제거하고 싶습니다.

업데이트:

텍스트 상자에 무언가를 입력하면 해당 정보를 서버로 비동기로 보내야하며 유효성 검사 문제가 있으면 응답이 표시됩니다. 그래서 나는 속성에 대한 검증을 할 수 없습니다. 메시지가 추가되거나 제거 된 경우 응답을 확인하겠습니다. 제거 된 경우 checkValidationErrors ()를 호출합니다.

대답

나는 구현했다 IDataErrorInfo 그런 다음 구현하기로 결정했습니다 INotifyDataErrorInfo. 이 검증 작업을 수행하여 두 인터페이스를 모두 구현해야합니다. 그래서 기본적으로 나는 제거했다 IDataErrorInfo 내 수업에서 구현되어 문제가 해결되었습니다.

도와 주셔서 감사합니다!

도움이 되었습니까?

해결책 2

나는 구현했다 IDataErrorInfo 그런 다음 구현하기로 결정했습니다 INotifyDataErrorInfo. 이 검증 작업을 수행하여 두 인터페이스를 모두 구현해야합니다. 그래서 기본적으로 나는 제거했다 IDataErrorInfo 내 수업에서 구현되어 문제가 해결되었습니다.

다른 팁

기본값 UpdateSourceTrigger ~을 위한 TextBox ~이다 LostFocus.

당신은 그것을 변경해야합니다 PropertyChanged 오류가 수정되면 유효성 검사 로직을 즉시 실행하려는 경우.

<TextBox Text="{Binding PropertyName, UpdateSourceTrigger=PropertyChanged}"/>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top