Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 请帮助我简化此数据验证(IDataErrorInfo)_C#_Wpf_Validation_Idataerrorinfo - Fatal编程技术网

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

C# 请帮助我简化此数据验证(IDataErrorInfo),c#,wpf,validation,idataerrorinfo,C#,Wpf,Validation,Idataerrorinfo,我的应用程序中有一堆文本框,它们都必须用数字(双倍)填充。我想使用数据验证来确保发生这种情况,并且用户不会输入字符串。目前在我的XAML中,我有: <TextBox x:Name="VoorzieningBerging" Text="{Binding Path=VoorzieningBerging, Source={StaticResource Gegevens}, ValidatesOnDataErrors=True, UpdateSourceTrig

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

<TextBox x:Name="VoorzieningBerging"
         Text="{Binding Path=VoorzieningBerging, Source={StaticResource Gegevens},
         ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay,
         FallbackValue=0}"/>
然而,在尝试让其他数据验证工作进行了大量的混乱之后,这也停止了对我的工作。请帮助我找到一种有效的方法来检查我所有的文本框是否都有双精度值

将数据绑定更改为以下内容时进行编辑:

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

if (name == "VoorzieningBerging") 
        error = double.TryParse(val.ToString(), out result) ? null : "error";
若你们想禁止输入双精度值,你们可以处理PreviewTimePut事件,若出现双精度值,你们可以将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");
    }
}

公共类Validation2:ValidationRule
{
公共覆盖验证结果验证(对象值,System.Globalization.CultureInfo CultureInfo)
{
双重结果;
返回double.TryParse(value.ToString(),out result)==true?new ValidationResult(true,null):new ValidationResult(false,“error”);
}
}

可以找到全面的信息

我考虑过这一点,但在这种情况下val会是什么呢。每个文本框都会有一个不同的“val”,这肯定是非常低效的?val是你的VoorzieningBerging。是的,我没有很多,这适用于30个文本框。所以我正在寻找一种集体的方式来完成这30个文本框和30个属性?谢谢,这正是我想要的!
  <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");
    }
}