私は WPF を使用しており、一連のコントロールにバインドされたエンティティを持っています。エンティティは、次のように 2 つのクラス レベルのバリデータで装飾されています。
[ExampleValidator1, ExampleValidator2]
public class Entity
エンティティには一連のフィールドがあり、コンボ ボックスからの選択に応じて、常にすべてが表示されるわけではありません。これらの選択ごとにバリデーターが存在します。エンティティの「タイプ」が特定のバリデーターと一致しない場合、そのバリデーターは true を返し、明らかに正しいバリデーターは次のように実際のフィールドを検証します。
public bool IsValid(object value, IConstraintValidatorContext constraintValidatorContext)
{
constraintValidatorContext.DisableDefaultError();
var allPropertiesValid = true;
var entity= (Entity)value;
if (supplier.ParticularEntityType)
{
return true;
}
if (String.IsNullOrEmpty(entity.Name) || entity.Name.Length > 50)
{
constraintValidatorContext.AddInvalid<Entity, string>("must be 50 or shorter and not empty", x => x.Name);
allPropertiesValid = false;
}
XAML は次のとおりです。
<TextBox Grid.Row="0" Grid.Column="3">
<TextBox.Text>
<Binding Path="Entity.Name" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True">
</Binding>
</TextBox.Text>
</TextBox>
明らかに、ユーザーに検証要件を知らせる素敵な赤いボックスとツール ヒントが表示されます。
私の問題は、コンボボックスの選択が変更されると、赤い強調表示が持続することです (コントロールが非表示になると、小さな赤い四角になります)。誰かが私に正しい道を教えてくれませんか!