Практическое руководство. Реализация проверки для пользовательских объектов
Обновлен: Ноябрь 2007
В этом примере демонстрируется реализация проверки для пользовательского объекта и последующей привязки к нему.
Пример
Можно обеспечить проверку для бизнес-слоя, если источник объекта реализует IDataErrorInfo, как показано в следующем примере:
public class Person : IDataErrorInfo
{
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
public string Error
{
get
{
return null;
}
}
public string this[string name]
{
get
{
string result = null;
if (name == "Age")
{
if (this.age < 0 || this.age > 150)
{
result = "Age must not be less than 0 or greater than 150.";
}
}
return result;
}
}
}
В следующем примере свойство Text текстового поля привязывается к свойству Age объекта Person, который был сделан доступным для привязки через объявление ресурса, предоставляемое x:Keydata. DataErrorValidationRule следит за ошибками проверки, вызываемыми реализацией IDataErrorInfo.
<TextBox Style="{StaticResource textBoxInError}">
<TextBox.Text>
<!--By setting ValidatesOnExceptions to True, it checks for exceptions
that are thrown during the update of the source property.
An alternative syntax is to add <ExceptionValidationRule/> within
the <Binding.ValidationRules> section.-->
<Binding Path="Age" Source="{StaticResource data}"
ValidatesOnExceptions="True"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<!--DataErrorValidationRule checks for validation
errors raised by the IDataErrorInfo object.-->
<!--Alternatively, you can set ValidationOnDataErrors="True" on the Binding.-->
<DataErrorValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Кроме того, вместо использования DataErrorValidationRule можно задать для свойства ValidatesOnDataErrors значение true.
Полный пример см. в разделе Пример проверки уровня бизнес-логики.
См. также
Задачи
Практическое руководство. Реализация проверки привязки