비 문자열 데이터 유형에 바인드 된 텍스트 상자의 Silverlight 유효성 검사
-
12-12-2019 - |
문제
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).다른 경우 유효성 검사에 실패하십시오. 그냥 해결 방법 ... 그러나 나를 위해 일합니다.
제휴하지 않습니다 StackOverflow