1

ビューに検証ルールのあるTextBoxがあります。

public class EmptyStringRule : ValidationRule
{
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
       if(String.IsNullOrEmpty(value.ToString()))
           return new ValidationResult(true,"String Cannot be empty");
        return new ValidationResult(true,null);
    }
}

空の文字列が入力されたとき。バインドされたプロパティは更新されず、テキストボックスは赤でマークされます。ソースを更新する必要がありますが、それでもテキストボックスの周りにマーカーを保持します。(入力は後でEFによって再度検証されます)。

どうすればいいですか?

4

1 に答える 1

6

これを行うには、検証ルールのValidationStepプロパティを「UpdatedValue」に設定します。

<Binding.ValidationRules>
    <c:EmptyStringRule ValidationStep="UpdatedValue"/>
</Binding.ValidationRules>

これにより、BindingExpressionが実際のフィールド値ではなく検証ルールクラスに渡されるため、更新されたフィールドの値をクエリするには、それに応じて検証ルールを変更する必要があることに注意してください。(私の例では、バインドされた文字列プロパティはMyViewModel.MyStringPropertyと呼ばれます):

public class EmptyStringRule : ValidationRule
{
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        var be = value as BindingExpression;
        if (be != null)
        {
            var item = be.DataItem as MyViewModel;
            if (item != null)
            {
                if (String.IsNullOrEmpty(item.MyStringProperty))
                {
                    return new ValidationResult(false, "String Cannot be empty");
                }
            }
        }
        return new ValidationResult(true, null);
    }
}

この設定では、テキストが空に設定されているときに実際にMyStringPropertyを更新する必要がありますが、それでも検証は行われます。

于 2012-11-28T13:16:08.597 に答える