TextBox with default ErrorTemplate
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:WpfApplication1"
x:Class="WpfApplication1.Window1"
Title="Binding Validation Sample"
SizeToContent="WidthAndHeight"
ResizeMode="NoResize">
<Window.Resources>
<c:MyDataSource x:Key="ods"/>
</Window.Resources>
<StackPanel>
<TextBox Name="textBox2" Width="50" FontSize="15">
<TextBox.Text>
<Binding Path="Age2" Source="{StaticResource ods}" UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<c:AgeRangeRule Min="21" Max="30"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
</Window>
//File:Window.xaml.vb
Imports System
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Windows.Navigation
Imports System.Windows.Shapes
Imports System.Windows.Data
Imports System.Globalization
Imports System.Collections.ObjectModel
Namespace WpfApplication1
Public Partial Class Window1
Inherits Window
Public Sub New()
InitializeComponent()
End Sub
End Class
Public Class AgeRangeRule
Inherits ValidationRule
Private _min As Integer
Private _max As Integer
Public Sub New()
End Sub
Public Property Min() As Integer
Get
Return _min
End Get
Set
_min = value
End Set
End Property
Public Property Max() As Integer
Get
Return _max
End Get
Set
_max = value
End Set
End Property
Public Overrides Function Validate(value As Object, cultureInfo As CultureInfo) As ValidationResult
Dim age As Integer = 0
Try
If DirectCast(value, String).Length > 0 Then
age = Int32.Parse(DirectCast(value, [String]))
End If
Catch e As Exception
Return New ValidationResult(False, "Illegal characters or " & e.Message)
End Try
If (age < Min) OrElse (age > Max) Then
Return New ValidationResult(False, "Please enter an age in the range: " & Min & " - " & Max & ".")
Else
Return New ValidationResult(True, Nothing)
End If
End Function
End Class
Public Class MyDataSource
Private _age As Integer
Private _age2 As Integer
Private _age3 As Integer
Public Sub New()
Age = 0
Age2 = 0
End Sub
Public Property Age() As Integer
Get
Return _age
End Get
Set
_age = value
End Set
End Property
Public Property Age2() As Integer
Get
Return _age2
End Get
Set
_age2 = value
End Set
End Property
Public Property Age3() As Integer
Get
Return _age3
End Get
Set
_age3 = value
End Set
End Property
End Class
End Namespace
Related examples in the same category