検証ルールを備えた単純なテキストボックスがありますが、特別な状況で非常に奇妙な動作をします。
コードをこのように使用し、プロパティが 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) に変更すると、赤い境界線が表示されます。