我有一个非常简单的 ValidationRule 的文本框:
<TextBox x:Name="textFirstName" Width="120">
<TextBox.Text>
<Binding
Path="CurrentSelectionData.Tables[cpeople].Rows[0][FirstName]"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:NonEmptyStringValidationRule ValidatesOnTargetUpdated="True"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
public class NonEmptyStringValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if (value == null || string.IsNullOrWhiteSpace(value.ToString()))
return new ValidationResult(false, "Must provide a value.");
return ValidationResult.ValidResult;
}
}
问题是即使文本框绑定到非空数据,启动时也会显示红色验证错误边框。
观察验证规则上的断点,我看到它为空字符串调用一次(在绑定更改为有效数据之前),在绑定更新为有效数据之后再次调用。果然,第二次调用返回了ValidResult,但红色边框依然存在。
手动清除文本框并在其中输入新文本会清除红色边框,但只需在其中输入新文本而不先清除它不会。
通过阅读其他人的问题,我可以看到一个潜在的棘手问题,这个 TextBox 位于选项卡控件中。但是,我的问题与其他人相反(尽管验证失败,他们没有得到红色边框),我也没有在任何时候移动到不同的选项卡控件(这是其他问题的原因)。
有什么想法我在这里想念的吗?