簡體   English   中英

文本框僅代碼隱藏的驗證規則

[英]Code-behind only validation rule of a textbox

我在XAML中有一個針對TextBox的窗口資源樣式,該樣式觸發和驗證。 這些可以與我的XAML TextBox一起很好地工作。 到現在為止還挺好。

我想做的事情與這種情況不同, TextBox是動態創建的,而不是在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。

謝謝!

我最終做到了。 很棒

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM