私はテキストボックスを含むユーザーコントロールを持っています。 Iは、IDataErrorInfoインターフェイスを実装する人というクラスた:IDataErrorInfo:入力を検証していません
public partial class TxtUserControl : UserControl
{
private Binding _binding;
public void SetSource(string path,Object source)
{
_binding = new Binding(path);
_binding.Source = source;
ValidationRule rule;
rule = new DataErrorValidationRule();
rule.ValidatesOnTargetUpdated = true;
_binding.ValidationRules.Add(rule);
_binding.ValidatesOnDataErrors = true;
_binding.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus;
_binding.NotifyOnValidationError = true;
_binding.ValidatesOnExceptions = true;
txtNumeric.SetBinding(TextBox.TextProperty, _binding);
}
...
}
ユーザーコントロールを含むWPFウィンドウがあります。今、ユーザーコントロールコードバインディングを設定し、それを通してSetSourceというメソッドを
class Person : IDataErrorInfo
{
private bool hasErrors = false;
#region IDataErrorInfo Members
public string Error
{
get
{
string error = null;
if (hasErrors)
{
error = "xxThe form contains one or more validation errors";
}
return error;
}
}
public string this[string columnName]
{
get
{
return DoValidation(columnName);
}
}
#endregion
}
を露出させます次のコード:
このコードでは、バインドは正常に動作していますが、検証は実行されません。このコードで何が間違っていますか?
Paul、 開発したフレームワークを見てきました。これを行う他の方法はありますか?ここでいくつかのポインタを提供できる場合は、 – Ngm
Have AgeがIDataErrorInfoを実装するか、WPF ValidationRule(UIレベルの検証)を使用してください - これは私が考えることができる唯一の回避策です。 –
私の検証フレームワークでは、UIコントロールをルール名(たとえば "AgeValue")に関連付けるだけで、IDataErrorInfoでは "AgeValue"ルールの検証を処理します。私のフレームワークでは、WPFの検証の方法と同じように、プロパティ名と検証ルール名の間に結合はありません。 –