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