Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ValidationRule for WPF Textbox

I am newbie to WPF.In my UserControl,I have 8 labels and its respective 8 textboxes as follows:

1.Label : abc   2.Label : def
  TextBox1 :        TextBox2 :

3.Label :xyz    4. Label : ghi
  Textbox3 :        TextBox4 :

Each of these textbox text property should contain text ending with its respective label name for TextBox1.text should be xxxx.abc, TextBox2.text should be xxxx.def and so on.if not textbox should have red border.

hope I am clear with the details.So Do i need to write different ValidationRule for each textbox??

Any you inputs??

like image 642
Patil Avatar asked Jan 23 '13 13:01

Patil


1 Answers

Why not have one ValidationRule implementation, with a property exposing what the field should end with, e.g:

public class EndsWithValidationRule : ValidationRule
{
    public string MustEndWith { get; set; }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        var str = value as string;
        if(str == null)
        {
            return new ValidationResult(false, "Please enter some text");
        }
        if(!str.EndsWith(MustEndWith))
        {
            return new ValidationResult(false, String.Format("Text must end with '{0}'", MustEndWith));
        }
        return new ValidationResult(true, null);

    }
}

Then you can use this like so:

<TextBox x:Name="TextBox1">
    <TextBox.Text>
        <Binding Path="BoundProperty1" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <local:EndsWithValidationRule MustEndWith=".def" />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

<TextBox x:Name="TextBox2">
    <TextBox.Text>
        <Binding Path="BoundProperty2" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <local:EndsWithValidationRule MustEndWith=".abc" />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>
like image 149
Lukazoid Avatar answered Oct 20 '22 13:10

Lukazoid