Gewusst wie: Implementieren von Validierungslogik für benutzerdefinierte Objekte
In diesem Beispiel wird gezeigt, wie Sie Validierungslogik für ein benutzerdefiniertes Objekt implementieren und dann an dieses binden.
Beispiel
Sie können Validierungslogik auf der Geschäftsebene bereitstellen, wenn Ihr Quellobjekt IDataErrorInfo implementiert, wie im folgenden Beispiel, in dem ein Person
-Objekt definiert wird, das IDataErrorInfo implementiert:
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;
}
}
}
Public Class Person
Implements IDataErrorInfo
Private _age As Integer
Public Property Age() As Integer
Get
Return _age
End Get
Set(ByVal value As Integer)
_age = value
End Set
End Property
Public ReadOnly Property [Error]() As String Implements IDataErrorInfo.Error
Get
Return Nothing
End Get
End Property
Default Public ReadOnly Property Item(ByVal columnName As String) As String Implements IDataErrorInfo.Item
Get
Dim result As String = Nothing
If columnName = "Age" Then
If Me._age < 0 OrElse Me._age > 150 Then
result = "Age must not be less than 0 or greater than 150."
End If
End If
Return result
End Get
End Property
End Class
Im folgenden Beispiel bindet die Texteigenschaft des Textfelds an die Person.Age
-Eigenschaft, die für die Bindung über eine Ressourcendeklaration verfügbar gemacht wurde, der x:Key
data
übergeben wird. Die DataErrorValidationRule prüft auf die von der IDataErrorInfo-Implementierung ausgelösten Überprüfungsfehler.
<Window x:Class="BusinessLayerValidation.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF IDataErrorInfo Sample" Width="350" Height="150"
xmlns:src="clr-namespace:BusinessLayerValidation">
<Window.Resources>
<src:Person x:Key="data"/>
<!--The tool tip for the TextBox to display the validation error message.-->
<Style x:Key="textBoxInError" TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel Margin="20">
<TextBlock>Enter your age:</TextBlock>
<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>
<TextBlock>Mouse-over to see the validation error message.</TextBlock>
</StackPanel>
</Window>
Alternativ können Sie die Eigenschaft DataErrorValidationRule auf ValidatesOnDataErrors festlegen, statt die true
anzuwenden.
Weitere Informationen
.NET Desktop feedback