wpfxamltemplatesvalidationrules

Multiple Validation Rules and Validation Templates in WPF


Does anyone have a tactic for dealing with multiple validation rules and templates for those validation rules.

Example:

I want to have two validation rules (required & data)

I want either...

One template that can change is display depending on which rule is fired or Two templates, which get displayed depending on which rule is fired


Solution

  • I've figured out an approach that works and I was hoping to get feedback from anyone that might have an interest in this.

    ValidationRule:

    My validation rule is altered to send back an "ErrorObject" that has IsRequired & Message properties:

    public class ErrorObject
    {
        public bool IsRequired { get; set; }
        public string Message { get; set; }
    }
    
    // ...
        
    return new ValidationResult(false, new ErrorObject() { IsRequired = true, Message = "Is Required" });
    

    Template:

    In the Validation Template I can now access these properties and alter the visual accordingly. (In this example I'm showing an * for required fields)

    <Border
        BorderBrush="Red"
        CornerRadius="3"
        BorderThickness="1">
        <AdornedElementPlaceholder
            x:Name="errorAdorner" />
    </Border>
    <TextBlock
        Text="*"
        Foreground="Red"
        Visibility="{Binding ElementName=errorAdorner,
                     Path=AdornedElement.(Validation.Errors).CurrentItem.ErrorContent.IsRequired,
                     Converter={StaticResource BooleanToVisibilityConverter}}" />
    

    So this is a simple example, but you can imagine that this can get very powerful. Thanks to Microsoft for letting us send back an object!