3

私のビュー モデルは、検証済みIDataErrorInfoのプロパティを実装して含んでいます。Message

にバインドされているUserControla でを作成しました。myには、バインドされているいくつかのコントロールがあります(したがって、 が表示されます)。Text DependencyPropertyMessageUserControlTextMessage

直接UserControlバインドされていないコントロールの検証エラーを表示するにはどうすればよいですか?Message

4

2 に答える 2

2

かなりの時間が経ち、他の人が役立つと思った場合に備えて共有すべきだと思った解決策を見つけることができました。

基本的に私は自分のにを追加しPropertyChangedCallbackましたText DependencyProperty。このコールバックTextでは、ビューモデルのプロパティとの間のバインディングを取得し、検証エラーがないかどうかを確認します。が見つかった場合は、にバインドされValidationErrorているすべてのコントロールを調べ、を使用してそれらのバインドに同じエラーを与えます。UserControlTextValidation.MarkInvalid

編集:

以下のコードをボタンクリックイベントハンドラーに配置すると、このような検証エラーのコピーは正常に機能します。ただし、コードがPropertyChangedCallbackforにある場合はText、何も起こりません。誰かが解決策を持っていますか?

// Get the binding from the Text property to the view model.
BindingExpression textBindingExpression = BindingOperations.GetBindingExpression(this,
    MyUserControl.TextProperty);

// If there is a validation error, then give it to the control bindings.
if (textBindingExpression != null && textBindingExpression.ValidationError != null) {

    Validation.MarkInvalid(this.MyTextBox.GetBindingExpression(TextBox.TextProperty),
        textBindingExpression.ValidationError);

    Validation.MarkInvalid(this.MyTextBlock.GetBindingExpression(TextBlock.TextProperty),
        textBindingExpression.ValidationError);
}
于 2012-12-06T14:47:12.750 に答える