ValidationRule for WPF Textbox
Asked Answered
M

1

10

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??

Maccaboy answered 23/1, 2013 at 13:44 Comment(0)
M
35

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>
Massicot answered 23/1, 2013 at 13:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.