如何在silverlight中点击按钮验证输入?

时间:2010-11-25 05:44:54

标签: silverlight

我正在使用DataAnnotation来验证输入控件。但ValidatesOnExceptions仅在用户在文本框中键入内容并按Tab键时才有效。 (基本上是关于Lostfocus事件)。

但如果用户从未在文本框中输入任何内容,请单击“提交”。这是行不通的。像ASP.NET一样.IsValid属性是否可以使用Silverlight中的任何属性或方法,这将验证UI上的所有控件?

2 个答案:

答案 0 :(得分:1)

从Terence提供的网址获取帮助,我已为您准备了以下解决方案。 这可以用来确保在服务调用之前设置所有属性。

public class PersonViewModel : EntityBase 
{
    private readonly RelayCommand saveCommand;

    public PersonViewModel(IServiceAgent serviceAgent)
    {
        saveCommand = new RelayCommand(Save) { IsEnabled = true };
    }   

    public RelayCommand SaveCommand // Binded with SaveButton
    {
        get { return saveCommand; }
    }   

    public String Name // Binded with NameTextBox
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
            PropertyChangedHandler("Name");                
            ValidateName("Name", value);
        }
    }

    public Int32 Age // Binded with AgeTextBox
    {
        get
        {
            return age;
        }
        set
        {
            age = value;
            PropertyChangedHandler("Age");
            ValidateAge("Age", value);
        }
    }

    private void ValidateName(string propertyName, String value)
    {
        ClearErrorFromProperty(propertyName);
        if (/*SOME CONDITION*/)     
            AddErrorForProperty(propertyName, "/*NAME ERROR MESSAGE*/");        
    }

    private void ValidateAge(string propertyName, Int32 value)
    {
        ClearErrorFromProperty(propertyName);
        if (/*SOME CONDITION*/)     
            AddErrorForProperty(propertyName, "/*AGE ERROR MESSAGE*/");             
    }   

    public void Save() 
    {
        ValidateName("Name", name);
        ValidateAge("Age", age);        
        if (!HasErrors)
        {                
            //SAVE CALL TO SERVICE
        }
    }       
}

答案 1 :(得分:0)

我不认为,有一种方法可以验证页面上可见的所有UserControl。但我建议你看看INotifyDataErrorInfo。在我看来,这是验证Silverlight数据的最佳方法。使用INotifyDataErrorInfo方法,您不必在视图中进行更改(如ValidatesOnException,...),并且您可以轻松地对WebService进行验证(这对于数据注释是不可能的)。

看看这里:http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2009/11/18/silverlight-4-rough-notes-binding-with-inotifydataerrorinfo.aspx

希望这会对你有所帮助。