문제

Silverlight inotifyDataErrorInfo를 사용하는 유효성 검사는 비 문자열 데이터 형식의 속성에 바인딩 된 텍스트 상자에서 사용하기 시작할 때까지 매끄러운 오류가 표시되면서 훌륭하게 작동합니다.내 계획은 속성의 setter를 사용하여 유효성 검사 논리를 수행하고 필요에 따라 오류를 추가 및 제거하는 것이 었습니다.문자열 인 텍스트 상자에서 훌륭하게 작동하지만 int에 텍스트 상자가 있고 문자열을 입력하면 setter가 호출되지 않습니다 (분명히 숫자가 아닌 값이 아닌 오류를 추가 할 수 있습니다.잘못되었습니다).여기에서 제안 된 행동 방침은 무엇입니까?나는 ValueConverters를 들여다 보았지만 유효성이 검증되는 내 클래스의 InotifyDataErrorInfo 로직에서 너무 멀리 분리되어 있습니다.

가상의 예 :

public class MyClass
{
    private string _prod;
    public string Prod
    {
        get { return _prod; }
        set //This works great
        {
            if (value.Length > 15)
            {
                AddError("Prod", "Cannot exceed 15 characters", false);
            }
            else if (value != _prod)
            {
                RemoveError("Prod", "Cannot exceed 15 characters");
                _prod= value;
            }
        }
    }

    private int _quantity;
    public int Quantity
    {
        get { return _quantity; }
        set //if a string was entered into the textbox, this setter is not called.
        {
            int test;
            if (!int.TryParse(value, test))
            {
                AddError("Quantity", "Must be numeric", false);
            }
            else if (test != _quantity)
            {
                RemoveError("Quantity", "Must be numeric");
                _quantity= test;
            }
        }
    }

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

    public void AddError(string propertyName, string error, bool isWarning)
    {
        //adds error to errors
    }
    public void RemoveError(string propertyName, string error)
    {
        //removes error from errors
    }

    //INotifyDataErrorInfo members...
}
.

도움이 되었습니까?

해결책

텍스트 상자의 값을 어쨌든 문자열 값으로 바인딩하고 거기에서 유효성 검사를 제안합니다. 유효성 검사가 성공적으로 전달 된 경우 실제로 데이터 유형을 다른 속성으로 전달합니다 (예 : int).다른 경우 유효성 검사에 실패하십시오. 그냥 해결 방법 ... 그러나 나를 위해 일합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top