Customize UpdateSourceExceptionFilter : Binding « Windows Presentation Foundation « VB.Net Tutorial






<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
WPF Customize Update Source Exception Filter








16.95.Binding
16.95.1.Bind to a Property of a UI ElementBind to a Property of a UI Element
16.95.2.Bind a Property of an Element to ItselfBind a Property of an Element to Itself
16.95.3.Specify a Default Value for a BindingSpecify a Default Value for a Binding
16.95.4.Create a Two-Way BindingCreate a Two-Way Binding
16.95.5.Debug Bindings Using Attached PropertiesDebug Bindings Using Attached Properties
16.95.6.String Array ResourceString Array Resource
16.95.7.Bind animate target value to Canvas(Window) widthBind animate target value to Canvas(Window) width
16.95.8.Display Current Date and Time: binding the DateTime.Now to LabelDisplay Current Date and Time: binding the DateTime.Now to Label
16.95.9.One way and two way bindingOne way and two way binding
16.95.10.Custom Element Binding WindowCustom Element Binding Window
16.95.11.Get XmlElement from Bounded viewGet XmlElement from Bounded view
16.95.12.Customize UpdateSourceExceptionFilterCustomize UpdateSourceExceptionFilter
16.95.13.Assign your own class to DataContent and bind to TextBoxAssign your own class to DataContent and bind to TextBox
16.95.14.Async bindingAsync binding
16.95.15.Null property bindingNull property binding
16.95.16.Binding Property with ExceptionBinding Property with Exception
16.95.17.Hierarchical Binding for three level nested objectsHierarchical Binding for three level nested objects
16.95.18.BindingOperations.GetBindingExpressionBindingOperations.GetBindingExpression
16.95.19.Bind to enum typesBind to enum types
16.95.20.Bind to a MethodBind to a Method
16.95.21.Manual Update TargetManual Update Target
16.95.22.Bind to the Values of an EnumerationBind to the Values of an Enumeration
16.95.23.Master Detail BindingMaster Detail Binding
16.95.24.Data binding using collections composed of mixed types of data.Data binding using collections composed of mixed types of data.
16.95.25.Binding Environment InfoBinding Environment Info
16.95.26.Bind to an ADO.NETDataSetBind to an ADO.NETDataSet
16.95.27.Text Data BindingText Data Binding
16.95.28.Bind to an Existing Object InstanceBind to an Existing Object Instance
16.95.29.Digital ClockDigital Clock
16.95.30.Use Data Triggers to Change the Appearance of Bound DataUse Data Triggers to Change the Appearance of Bound Data