非常に単純な 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;
}
}
問題は、テキスト ボックスが空でないデータにバインドされている場合でも、起動時に赤い検証エラーの境界線が表示されることです。
検証ルールのブレークポイントを見ると、(バインディングが有効なデータに変更される前に) 空の文字列に対して 1 回呼び出され、バインディングが有効なデータに更新された後にもう一度呼び出されることがわかります。案の定、2 番目の呼び出しは ValidResult を返しますが、赤い境界線は残っています。
テキストボックスを手動でクリアして新しいテキストを入力すると、赤い境界線がクリアされますが、最初にクリアせずに新しいテキストを入力するだけではクリアされません。
他の人々の質問を読むことから、私が見ることができる1つの潜在的なトリッキーは、このTextBoxがタブコントロールにあるということです。ただし、私の問題は他の人々の反対であり (検証に失敗したにもかかわらず赤い境界線が表示されませんでした)、別のタブ コントロールに移動することもありません (これが他の問題の原因でした)。
私がここで見逃しているアイデアはありますか?