Mega Code Archive

 
Categories / VB.Net / WPF
 

TextBox with UpdateSourceExceptionFilter handler

<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">     <Window.Resources>         <c:MyDataSource x:Key="ods"/>         <ControlTemplate x:Key="validationTemplate">             <DockPanel>                 <TextBlock Foreground="Red" FontSize="20">!</TextBlock>                 <AdornedElementPlaceholder/>             </DockPanel>         </ControlTemplate>         <Style x:Key="textBoxInError" TargetType="{x:Type 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>         <TextBox Name="textBox3" Width="50" FontSize="15"              Validation.ErrorTemplate="{StaticResource validationTemplate}"              Style="{StaticResource textBoxInError}">             <TextBox.Text>                 <Binding Path="Age3" Source="{StaticResource ods}" UpdateSourceTrigger="PropertyChanged">                     <Binding.ValidationRules>                         <ExceptionValidationRule/>                     </Binding.ValidationRules>                 </Binding>             </TextBox.Text>         </TextBox>         <CheckBox Name="cb" Checked="UseCustomHandler" Unchecked="DisableCustomHandler">Enable Custom Handler (see ToolTip)</CheckBox>     </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     Private Sub UseCustomHandler(sender As Object, e As RoutedEventArgs)       Dim myBindingExpression As BindingExpression = textBox3.GetBindingExpression(TextBox.TextProperty)       Dim myBinding As Binding = myBindingExpression.ParentBinding       myBinding.UpdateSourceExceptionFilter = New UpdateSourceExceptionFilterCallback(AddressOf ReturnExceptionHandler)       myBindingExpression.UpdateSource()     End Sub     Private Sub DisableCustomHandler(sender As Object, e As RoutedEventArgs)       Dim myBinding As Binding = BindingOperations.GetBinding(textBox3, TextBox.TextProperty)       myBinding.UpdateSourceExceptionFilter = DirectCast([Delegate].Remove(myBinding.UpdateSourceExceptionFilter, New UpdateSourceExceptionFilterCallback(AddressOf ReturnExceptionHandler)), UpdateSourceExceptionFilterCallback)       BindingOperations.GetBindingExpression(textBox3, TextBox.TextProperty).UpdateSource()     End Sub     Private Function ReturnExceptionHandler(bindingExpression As Object, exception As Exception) As Object       Return "This is from the UpdateSourceExceptionFilterCallBack."     End Function   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