请帮我简化此数据验证(IDataErrorInfo)

时间:2014-09-04 16:31:12

标签: c# wpf validation idataerrorinfo

我的应用程序中有一堆文本框,所有文本框都必须填充数字(双打)。我想使用数据验证来确保这种情况发生,并且用户不输入字符串。目前在我的XAML中我有:

<TextBox x:Name="VoorzieningBerging"
         Text="{Binding Path=VoorzieningBerging, Source={StaticResource Gegevens},
         ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay,
         FallbackValue=0}"/>

在我的资源中,我有以下课程:

public class GegevensValidatie : IDataErrorInfo
{
    public string VoorzieningBerging
    {
        get;
        set;
    }

    public string Error
    {
        get { return null; }
    }

    public string this[string name]
    {
        get
        {
            string err = string.Empty;

            if (name == "VoorzieningBerging") {
                try
                {
                    double.Parse(VoorzieningBerging);
                }
                catch
                {
                    err = "error";
                }
            }

            return err;
        }
    }
}

然而,在试图让其他DataValidations工作之后,我已经停止了工作。请帮我找一个有效的方法来检查我的所有文本框是否都有双倍的价值。

编辑,将DataBinding更改为:

Mode=OneWayToSource

当我在文本框中填写除数字之外的任何内容时,它将起作用并显示“错误”。但是,在我的应用程序中为每个文本框添加“if”语句将会非常低效

1 个答案:

答案 0 :(得分:0)

就在上面

if (name == "VoorzieningBerging") 
        error = double.TryParse(val.ToString(), out result) ? null : "error";

如果要禁止输入double值,可以处理PreviewTextInput事件,如果双重出现,则将EventArgs(e.Handled)的对象设置为true。

 private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
    {
        double result;
        if (double.TryParse(((TextBox)sender).Text, out result))
            e.Handled = true;
    }

许多人查看

  <TextBox>
        <TextBox.Text>
            <Binding Path="Name" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <local:Validation2/>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>

public class Validation2 : ValidationRule
{
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        double result;
        return double.TryParse(value.ToString(), out result) == true ? new ValidationResult(true, null) : new ValidationResult(false, "error");
    }
}

可以找到综合信息here