0

私は 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>

明らかに、ユーザーに検証要件を知らせる素敵な赤いボックスとツール ヒントが表示されます。

私の問題は、コンボボックスの選択が変更されると、赤い強調表示が持続することです (コントロールが非表示になると、小さな赤い四角になります)。誰かが私に正しい道を教えてくれませんか!

4

1 に答える 1

0

コンボボックスが変更されたときに OnPropertyChanged を起動することで解決しました。理想的な解決策ではありませんが、実行可能です。

于 2009-09-28T15:10:01.830 に答える