0

Expander.Header バインディングに関連付けられている場合、カスタム ValidationRule を起動するのに問題があります。実際、これらのカスタム ルールを起動できると思われる唯一の場所は、DataGrid.RowValidationRules ブロック内です...

エクスパンダは、私の Window XAML ファイルで次のように定義されています。

<Expander Style="{StaticResource ValidatedSecondLevelExpanderStyle}">
    <Expander.Header>
        <Binding Path="Name" Mode="OneWay" ValidatesOnDataErrors="True" NotifyOnValidationError="True">
            <Binding.ValidationRules>
                <ValidationRules:BoundObjectIsValid />
            </Binding.ValidationRules>
        </Binding>
    </Expander.Header>
</Expander>

バインドされたプロパティ 'Name' は正しく表示されますが、検証規則 'BoundObjectIsValid' は呼び出されません。これは可能ですか?もしそうなら、何が欠けていますか?

バインドされたオブジェクトに IDataErrorInfo を代わりに実装できることはわかっていますが、システムの他の部分によって提供されるコンテキストがなければ、オブジェクトはそれ自体を適切に検証できません。リファクタリングは可能ですが、最初に ValidationRules を動作させたいと思っています!

4

1 に答える 1

0

msdnを参照してください。

バインディング エンジンは、バインディング ターゲット プロパティ値である入力値をバインディング ソース プロパティに転送するたびに、バインディングに関連付けられている各 ValidationRule をチェックします。

したがって、ここでは、 Expander.header は値の入力に使用できるコントロールではないため、ソースプロパティに転送される入力値はありません。

編集:しかし、ValidationRuleにはValidatesOnTargetUpdated'という名前のプロパティがあります。true に設定すると、対象のプロパティが更新されたときに検証規則が適用されます。

于 2012-12-06T00:28:44.827 に答える