我正在使用DataAnnotation来验证输入控件。但ValidatesOnExceptions仅在用户在文本框中键入内容并按Tab键时才有效。 (基本上是关于Lostfocus事件)。
但如果用户从未在文本框中输入任何内容,请单击“提交”。这是行不通的。像ASP.NET一样.IsValid属性是否可以使用Silverlight中的任何属性或方法,这将验证UI上的所有控件?
答案 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进行验证(这对于数据注释是不可能的)。
希望这会对你有所帮助。