验证范围规则不会在自动计算的文本框字段中动态发生

本文关键字:字段 文本 动态 计算 规则 范围 验证 | 更新日期: 2023-09-27 18:35:39

我希望在将计算值推送到文本框字段时进行范围规则验证,但仅当用户直接在文本框中输入值时,才会显示验证。验证不会从计算值中发生,用户将其放入其他文本框中。如何通过自动计算动态进行验证?我对 C# 和 mvvm 相当陌生,所以也许我做得不对。我对 IDataErrorInformation 不太了解,所以如果可能的话,我宁愿使用 INotifyPropertyChanged。

    private int _FIMSamlet_score;
    public int FIMSamlet_score
    {
        get { return this._FIMSamlet_score; }
        set
        {
            if (Int32.Parse(value.ToString()) < 18 || Int32.Parse(value.ToString()) > 126)
            { throw new ArgumentException("The value must be between 18 and 126"); }
            this._FIMSamlet_score = value;
            CalculateFimSamletscore();
            this.OnPropertyChanged("FIMSamlet_score");
        }
    }

我计算输入值的方法。

   private void CalculateFimSamletscore()
    {
        try
        {
            FIMSamlet_score = Convert.ToInt32(a)
                + Convert.ToInt32(b)
                + Convert.ToInt32(c)
                + Convert.ToInt32(d)
                + Convert.ToInt32(e)
                + Convert.ToInt32(f)
                + Convert.ToInt32(g)
                + Convert.ToInt32(h)
                + Convert.ToInt32(i)
                + Convert.ToInt32(j)
                + Convert.ToInt32(k)
                + Convert.ToInt32(l)
                + Convert.ToInt32(m);
        }
        catch (Exception)
        {
        }
    }

XAML

<TextBox Validation.ErrorTemplate="{StaticResource validationTemplate}" Grid.Column="1" Grid.Row="0" Height="23" HorizontalAlignment="Left" Margin="5" Name="fIM_samletScore" VerticalAlignment="Center" Width="150" Background="WhiteSmoke">
    <TextBox.Text>
        <Binding Path="FIMSamlet_score" Mode="TwoWay" ValidatesOnExceptions="true" NotifyOnValidationError="true" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <ExceptionValidationRule/>
                <validators:FIMRangeRule />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

我还制作了一个验证类

public class FIMRangeRule : ValidationRule
{
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        if (value == null || string.IsNullOrEmpty(value.ToString()))
            return new ValidationResult(false, "Feltet må ikke være tomt. Indtast gyldig værdi.");
        else
        {
            if ((Int32.Parse(value.ToString()) < 18) || (Int32.Parse(value.ToString()) > 126))
                return new ValidationResult
                (false, "Værdi udenfor gyldig interval 18-126");
        }
        return ValidationResult.ValidResult;
    }
}

验证范围规则不会在自动计算的文本框字段中动态发生

来自 WPFTutorial.net。

BindingExpression 中的 ValidatioRule 仅在绑定的目标端发生更改时触发。

在代码中,文本框是目标端。这就是您看不到验证结果的原因。

本教程继续提供通过代码设置验证错误的提示。