2012-07-27 2 views
1

INotifyDataErrorInfo를 사용하는 Silverlight 유효성 검사는 문자열이 아닌 데이터 형식의 속성에 바인딩 된 TextBox에서 사용하기 시작할 때까지 매끄러운 오류 표시로 훌륭하게 작동했습니다. 내 계획은 속성의 설정자를 사용하여 유효성 검사 논리를 수행하고 필요한 경우 오류를 추가 및 제거하는 것이 었습니다. 그것은 훌륭한 TextBoxes 문자열이지만, 당신이 TextBox가 Int에 바인딩되어 있고 문자열을 입력하면 setter가 호출되지 않습니다. (분명히 숫자가 아닌 값이 있다는 오류를 추가 할 수 있습니다. 무효). 여기서 제안되는 행동 방침은 무엇입니까? 나는 ValueConverters를 살펴 보았지만 그것들은 유효성이 확인되고있는 클래스의 INotifyDataErrorInfo 로직과 너무 멀리 떨어져있다.문자열 데이터 형식이 아닌 문자열에 바인딩 된 Silverlight 유효성 검사

가상 예 :

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... 
} 

답변

0

난 당신이 어쨌든 문자열 값으로 TextBox의 값을 바인딩하고 거기 유효성 검사를 수행하는 것이 좋습니다. 유효성 검사가 성공하면 값을 실제로 찾고있는 데이터 유형 (예 : int)을 가진 다른 속성으로 전달합니다. 다른 경우에는 검증을 실패하십시오. 그냥 해결 방법을 ...하지만 나를 위해 작동합니다.

+0

나는 이것을 실제로 이미 고려하고있었습니다. 나를 다시 붙잡는 유일한 방법은 내가 가질 수있는 많은 입력입니다. 모든 숫자 속성에 대한 문자열 속성을 가짐으로써 엉망진창에 추가됩니다. – Ethan

+0

좋은 해결 방법이기 때문에 이것을 답으로 표시하지만, 문자열이 아닌 속성이 많은 나와 같은 상황에있는 사람들에게 제안하기 만하면됩니다. 툴킷에는 텍스트 입력을 제한하는 numericUpDown 컨트롤이 있습니다 숫자 값으로 변환하므로 유효성 검사가 더 이상 필요하지 않습니다. – Ethan

관련 문제