仅代码隐藏文本框的验证规则

时间:2015-09-08 05:00:50

标签: c# validation binding textbox code-behind

我在XAML中有一个针对TextBox es的窗口资源样式,它的样式触发器和验证。这些适用于我的XAML TextBox es。到目前为止,非常好。

我想做的不同于TextBox es是动态创建的,而不是XAML。

请特别注意,有一个参数要传递给ValidationRule,名为WhatToCheck。

到目前为止,这是我的代码:

private StackPanel NumberList(string queryLabel, string businessModelObjectName)
{
    TestData currentTestData = dTestDataHolder["CurrentTestData"];

    StackPanel spNumberList = new StackPanel();
    spNumberList.Orientation = Orientation.Horizontal;
    spNumberList.FlowDirection = System.Windows.FlowDirection.RightToLeft;
    spNumberList.Margin = new Thickness(0, 0, 0, 10);

    Label lNumberList = new Label();
    lNumberList.Content = queryLabel;
    lNumberList.FontSize = 16;
    lNumberList.FontWeight = FontWeights.Bold;
    spNumberList.Children.Add(lNumberList);

    TextBox tbNumberList = new TextBox();
    tbNumberList.Margin = new Thickness(10, 0, 0, 0);
    tbNumberList.FontSize = 16;
    tbNumberList.VerticalContentAlignment = VerticalAlignment.Center;
    tbNumberList.FontFamily = new FontFamily("Courier New");
    tbNumberList.Width = 100;
    tbNumberList.AcceptsReturn = false;
    tbNumberList.FlowDirection = FlowDirection.LeftToRight;
    spNumberList.Children.Add(tbNumberList);

    Binding bindingNumberList = new Binding(businessModelObjectName);
    bindingNumberList.Source = currentTestData;
    bindingNumberList.Mode = BindingMode.TwoWay;
    tbNumberList.SetBinding(TextBox.TextProperty, bindingNumberList);

    return spNumberList;
}


public class GenericValidationRule : ValidationRule
{
    public string WhatToCheck{ get; set; }

    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        var enteredString = value as string;

        switch (WhatToCheck)
        {
            case "No Extension":
                {
                    if (enteredString.IndexOf(".doc", StringComparison.InvariantCultureIgnoreCase) >= 0)
                    {
                        return new ValidationResult(false, String.Format("SOMETHING"));
                    }
                    break;
                }
            case "Only Numbers":
                {
                    double dDummy;
                    if (!double.TryParse(enteredString, out dDummy))
                    {
                        return new ValidationResult(false, String.Format("SOMETHING"));
                    }
                    break;
                }
            default:
                break;
        }
        return new ValidationResult(true, null);

    }
}
  • 使用c#和Visual Studio 2013。
  • 没有MVVM。

谢谢!

1 个答案:

答案 0 :(得分:0)

我最终这样做了。工作得很好,

    Binding bindingNumberList = new Binding(businessModelObjectName);
    bindingNumberList.Source = currentTestData;
    bindingNumberList.Mode = BindingMode.TwoWay;
    bindingNumberList.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
    bindingNumberList.ValidatesOnDataErrors = true;
    GenericValidationRule gvrCheckValidImageNubers = new GenericValidationRule();
    gvrCheckValidImageNubers.ValidationStep = ValidationStep.RawProposedValue;
    gvrCheckValidImageNubers.WhatToCheck = "Contains Existing Image Numbers";
    bindingNumberList.ValidationRules.Add(gvrCheckValidImageNubers);
    tbNumberList.SetBinding(TextBox.TextProperty, bindingNumberList);