1

ユーザーがテキスト ボックスに入力したデータをバインドする前に、ビジネス ルールを確認したいですか? データをモデルにバインドする前に、データが特定の基準を満たしていることを確認する必要があります。バインドが発生する前にメソッドを実行できれば、これは非常に簡単です。これを行う方法はありますか?

4

3 に答える 3

3

実装できますValidationRule

public class CustomValidationRule : ValidationRule
{
    private static bool IsValid(string value)
    {
        // implement you business rule checking logic here
        // if valid
        //     return true;
        // else
        //     return fase;
    }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        var val = (string)value;
        if(IsValid(val))
        {
            return ValidationResult.ValidResult;
        }
        else
        {
            return new ValidationResult(false, "Value is not valid");
        }
    }
}

そしてそれをあなたのバインディングで使用してください:

<TextBox>
    <TextBox.Text>
        <Binding Path="ViewModelProperty" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <validation:CustomValidationRule />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

wherevalidationは名前空間 where の XML 名前空間エイリアスです( XAMLCustomValidationRuleに追加します)。xmlns:validation="clr-namespace:NAMESPACE_NAME_HERE"

于 2012-07-09T08:41:53.297 に答える
1

ビューにバインドされている ViewModel に IDataErrorInfo を実装させることができます。このインターフェイスには、プロパティとインデクサーがあります。

public string this[string columnName]
{
    //The validation logic goes here
    if( columnName == "Property1")
    {
        //put validation here and return error message if exists
        if(this.Property1 == "")
        {
             return "The field Property1 is required";
        }
    }
    //and so on
}

public string Error
{
    return "This object is not valid";
}

ビューのバインディングで、バインディング マークアップに次を追加します。

<TextBox Text={Binding Property1, ValidatesOnDataErrors=True} />

また、プロパティで変更されたプロパティを通知することを忘れないでください。

これがお役に立てば幸いです。

于 2012-07-09T08:47:07.953 に答える
1

Binding Converterを使用できます。作成するコードは、バインドされた値が UI にプッシュされるに実行されます。これがコンバーターの実際の意味です: bindind メカニズムの途中でコードを挿入できるようにするため ( UI が実行されたバインディングのまたは後)

于 2012-07-09T08:36:41.823 に答える