繁体   English   中英

如何为ValidationRule类传递动态值

[英]how to pass a dynamic value for ValidationRule Class

我是wpf的新手,我试图制作一些showdialog窗口的验证文本框。 我已经对空的dield和空格进行了验证,但我需要为大于某些最大值的数字添加验证,我传递给对话但不知道如何将它用于ValidationRule类。

这是我的ValidationRule类:

public class CustomValidationRule : ValidationRule
{
    public int kMax
    {
        get { return kMax; }
        set { kMax = value; }
    }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        if (string.IsNullOrEmpty(value.ToString()))
            return new ValidationResult(false, "No number was entered!");
        if (value.ToString().Contains(' '))
            return new ValidationResult(false, string.Format("No spaces allowed!" );
        try
        {
            int num = Convert.ToInt32(value);
            if (num == 0 || num > kMax)
                return new ValidationResult(false, string.Format("Number must be in range of (0,{0})", kMax));
        }
        catch (FormatException fe)
        {
            return new ValidationResult(false, fe.Message);
        }

        return ValidationResult.ValidResult;
    }
}

这是我的窗口代码:

public partial class kInputWindow : Window
{
    public string ResultText { get; set; }
    public int kMax { get; set; }

    public kInputWindow(string question,int kMax)
    {
        InitializeComponent();
        lblQuestion.Content = question;
        this.DataContext = this;
        this.kMax = kMax;
    }

    private void btnDialogOk_Click(object sender, RoutedEventArgs e)
    {
        this.DialogResult = true;
    }

    public string Answer
    {
        get { return txtAnswer.Text; }
    }

    private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
    {
        Regex regex = new Regex("[^0-9]+");
        e.Handled = regex.IsMatch(e.Text);
    }
}

当我在主窗口创建对话框时,我这样做:

kInputWindow kInput = new kInputWindow(question, lines);
kInput.ShowDialog();

现在kinput得到了我需要的价值,但我不知道如何将它传递给我的ValidationRule类

在WPF中,验证通常在xaml中设置。 当您为文本框创建绑定时,您还可以指定它的验证规则,例如;

          <Binding.ValidationRules>
          <CustomValidationRule/>
      </Binding.ValidationRules>

如果您愿意,可以添加几个验证规则。 当绑定的值发生更改时,它将传递给验证规则对象并自动验证,因此无需手动传入值。 您需要在xaml中创建验证规则的实例。 本文给出了很好的介绍

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM