Binding.ValidatesOnExceptions Property
Updated: June 2010
Gets or sets a value that indicates whether to include the ExceptionValidationRule.
Assembly: PresentationFramework (in PresentationFramework.dll)
XMLNS for XAML: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation
Setting this property provides an alternative to using the ExceptionValidationRule element explicitly. The ExceptionValidationRule is a built-in validation rule that checks for exceptions that are thrown during the update of the source property. If an exception is thrown, the binding engine creates a ValidationError with the exception and adds it to the Validation.Errors collection of the bound element. The lack of an error clears this validation feedback, unless another rule raises a validation issue.
ValidatesOnExceptions is introduced in the .NET Framework version 3.5. For more information, see .NET Framework Versions and Dependencies.
The following examples use ValidatesOnExceptions to validate user input in a TextBox. The first example creates a data type that throws an exception when the Age property is set to an invalid property.
The following example binds the Age property to the TextBox and sets ValidatesOnExceptions to true on the Binding. When the user enters an invalid value, a red border appears in the TextBox and the ToolTip reports the error message.
<StackPanel Margin="20"> <StackPanel.Resources> <src:PersonThrowException 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> </StackPanel.Resources> <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> </TextBox.Text> </TextBox> <TextBlock>Mouse-over to see the validation error message.</TextBlock> </StackPanel>
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
For the sake of completeness I'd include an example where the property doesn't throw an exception based on an internal rule, but rather, the exception is thrown before the property is set. For example, if a class has a property of type Int and I attempt to place the value 'A' into it the UI will not show an error unless ValidatesOnExceptions is set to true. This validation is occuring before the property Set is invoked. According to my other reading this is because the value never gets to the property because of the type mismatch. (See Using CSLA 4 WPF And Silverlight, Rockford Lhotka)
So the current example is helpful, but it masks the fact there is another, more fundamental example of where this ValidatesOnException property may warn the user of errors, even without the creation of internal rules.
- 1/31/2012
- Meh_Gerbil