かなりの時間が経ち、他の人が役立つと思った場合に備えて共有すべきだと思った解決策を見つけることができました。
基本的に私は自分のにを追加しPropertyChangedCallback
ましたText
DependencyProperty
。このコールバックText
では、ビューモデルのプロパティとの間のバインディングを取得し、検証エラーがないかどうかを確認します。が見つかった場合は、にバインドされValidationError
ているすべてのコントロールを調べ、を使用してそれらのバインドに同じエラーを与えます。UserControl
Text
Validation.MarkInvalid
編集:
以下のコードをボタンクリックイベントハンドラーに配置すると、このような検証エラーのコピーは正常に機能します。ただし、コードがPropertyChangedCallback
forにある場合は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);
}