INotifyDataErrorInfo を使用した Silverlight の検証は、文字列以外のデータ型のプロパティにバインドされた TextBox で使用するまでは、滑らかなエラー表示でうまく機能していました。私の計画は、プロパティのセッターを使用して検証ロジックを実行し、必要に応じてそこからエラーを追加および削除することでした。文字列である TextBox ではうまく機能しますが、TextBox が Int にバインドされていて、文字列を入力すると、セッターは呼び出されません (数値以外の値が明らかにエラーであるというエラーを追加できます)。無効)。ここからの推奨される行動方針は何ですか?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...
}