TextBox的Silverlight验证绑定到非字符串数据类型

时间:2012-07-27 20:43:23

标签: silverlight validation inotifydataerrorinfo

使用INotifyDataErrorInfo的Silverlight验证在其光滑的错误显示方面效果很好,直到我开始尝试在绑定到非字符串数据类型属性的TextBox上使用它。我的计划是使用属性的setter来执行验证逻辑,根据需要添加和删除错误。它适用于作为字符串的TextBox,但如果你有一个绑定到Int的TextBox并输入一个字符串,那么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...
}

1 个答案:

答案 0 :(得分:0)

我建议您将TextBox的值绑定到字符串值,然后在那里进行验证。 如果验证成功,则将值传递给另一个具有您实际查找的数据类型的属性(例如int)。在任何其他情况下,验证失败。 只是一个解决方法......但对我有用。