1

我现在遇到的问题是,对于我目前拥有的每个文本框,我必须指定一个绑定路径以验证文本框是否为空。但是,如果碰巧我有一百个文本框,我不可能为所有 100 个文本框单独创建一个获取和设置方法。那么有没有更好的方法来进行我现在拥有的当前验证?

以下是我目前拥有的代码,

在 XAML 中

 <Grid.BindingGroup>
            <BindingGroup Name="RequiredFields">
                <BindingGroup.ValidationRules>
                    <local:MandatoryFieldRule ValidationStep ="CommittedValue"/>
                </BindingGroup.ValidationRules>
            </BindingGroup>
        </Grid.BindingGroup>
            <TextBox x:Name="ds_instruct" HorizontalAlignment="Left" Height="30"
               Margin="286,186,0,0" TextWrapping="Wrap" VerticalAlignment="Top"    
               Width="275" FontSize="11" GotFocus="textBox_Expand"                                                     
               LostFocus="textBox_Expand" Tag="Default Special Instruction" 
               SpellCheck.IsEnabled="True" 
               Text="{Binding  Path=Text, BindingGroupName=RequiredFields,ValidatesOnDataErrors=true}"/>

在验证文件中:

public String Text { get; set; }
public String Text1 { get; set; }

 #region IDataErrorInfo Members
   public string Error
    {
        get {throw new NotImplementedException(); }
    }

    public string this[string columnName]
    {
        get 
        {
            string result = null;
            if (columnName == "Text")
            {
                if (string.IsNullOrEmpty(Text))
                {result = "Mandatory field required"; }
            }
            if (columnName == "Text1")
            {
                if (string.IsNullOrEmpty(Text1))
                { result = "Mandatory field required"; }
            }
            return result;

        }

    }

    #endregion

所以我的问题是,如何在不指定一对一绑定的情况下验证多个文本框的必填字段(文本框到 getter 和 setter 方法)?

谢谢大家!

4

1 回答 1

0

也许你可以Reflection用来检查字符串的值

public string this[string columnName]
{
    get 
    {
        string result = null;
        if (string.IsNullOrEmpty(this.GetType().GetProperty(columnName).GetValue(this) as string))
        {
            result = "Mandatory field required";
        }
        return result;
    }
}
于 2013-03-29T00:00:51.467 回答