如何在不使用绑定路径的情况下对必填字段进行验证

时间:2013-03-28 04:54:34

标签: c# wpf xaml

我现在的问题是, 对于我目前的每个textBox,我必须指定一个Binding路径,以验证textBox是否为空。 但是,如果碰巧我有一百个textBox,我不能单独为所有100个textBox创建一个get和set方法。那么有没有更好的方法来进行我现在的当前验证?

以下是我目前的代码,

在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

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

提前谢谢大家!

1 个答案:

答案 0 :(得分: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;
    }
}