【问题标题】:Code-behind only validation rule of a textbox文本框的仅代码隐藏验证规则
【发布时间】:2015-12-03 15:39:09
【问题描述】:

我在 XAML 中有一个针对TextBoxes 的窗口资源样式,该样式触发和验证。这些非常适合我的 XAML TextBoxes。到目前为止,一切顺利。

我想做的与TextBoxes 是动态创建的这种情况不同,而不是在 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。

谢谢!

【问题讨论】:

    标签: c# validation binding textbox code-behind


    【解决方案1】:

    我最终这样做了。效果很好,

        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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 2013-04-05
      相关资源
      最近更新 更多