0

我有一个带有验证规则的简单文本框,但在特殊情况下会出现非常奇怪的行为。

如果我使用我的代码,并且我的属性为 0(因为它来自 db),它会按预期工作。TextBox 在开始时有红色边框。

<TextBox x:Name="TxtOfferNumber"
        IsReadOnly="{Binding SelectedOffer.IsValid}"
        GotKeyboardFocus="TxtOfferNumber_GotKeyboardFocus"
        GotMouseCapture="TxtOfferNumber_GotMouseCapture">
    <TextBox.Text>
        <Binding Path="OfferNumberLookup" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <validators:OfferNumberValidator ValidatesOnTargetUpdated="True"/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

我的验证规则:

   public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        return string.IsNullOrWhiteSpace(value as string) || Convert.ToInt32(value) != 0 ?
            ValidationResult.ValidResult :
            new ValidationResult(false, "Le numéro d'offre doit être informé!");
    }

问题是我想要这个字段是必需的,所以空是无效的。

因为我希望我的验证规则是:

   public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        return !string.IsNullOrWhiteSpace(value as string) && Convert.ToInt32(value) != 0 ?
            ValidationResult.ValidResult :
            new ValidationResult(false, "Le numéro d'offre doit être informé!");
    }

我很头疼。验证函数返回正确的结果,但没有红色边框。如果我输入正确的值并更改为错误的值(空或 0),现在我得到红色边框。

4

1 回答 1

1

如果问题是 TextBox 在启动时没有得到验证,那么只有当输入发生变化时,一个快速而肮脏的修复可能是将 Text(或绑定属性)设置为正确的值,然后在加载期间设置为错误的值。

于 2014-09-17T10:22:01.357 回答