验证范围规则不会在自动计算的文本框字段中动态发生
本文关键字:字段 文本 动态 计算 规则 范围 验证 | 更新日期: 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 仅在绑定的目标端发生更改时触发。
在代码中,文本框是目标端。这就是您看不到验证结果的原因。
本教程继续提供通过代码设置验证错误的提示。