私のプロジェクトでは、検証のために IDataErrorInfor を使用し、xaml コードではテキストボックスに NotifyfyOvalidationError= true を指定しました。
すべての検証は正しく実行されますが、唯一のことは、この TextBox にエラーが含まれていることを確認するために表示したい TextBox とツールチップを横切る赤い線としてエラー テンプレートが表示されないということです。
他のすべての TextBox についても同じことが正しく機能し、もう 1 つのことは、この TextBox の検証が、コードで設定したビューモデルから機能することです。
XAML :
<TextBox Margin="0,7" Text="{Binding Path=Address.AddressLines, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=true, NotifyOnValidationError=true}" Width="200" HorizontalAlignment="Left" VerticalAlignment="Stretch" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
モデルを見る:
region IDataErrorInfo メンバ
string IDataErrorInfo.Error { get { return null; } }
string IDataErrorInfo.this[string propertyName]
{
get { return this.GetValidationError(propertyName); }
}
#endregion // IDataErrorInfo Members
#region Validation
/// <summary>
/// Returns true if this object has no validation errors.
/// </summary>
public bool IsValid
{
get
{
foreach (string property in ValidatedProperties)
if (GetValidationError(property) != null)
return false;
return true;
}
}
static readonly string[] ValidatedProperties =
{
"Address",
};
string GetValidationError(string propertyName)
{
if (Array.IndexOf(ValidatedProperties, propertyName) < 0)
return null;
string error = null;
switch (propertyName)
{
case "Address":
error = this.ValidateAddressLine();
break;
default:
Debug.Fail("Unexpected property being validated on School: " + propertyName);
break;
}
return error;
}
string ValidateAddressLine()
{
if (IsStringMissing(this.Address.AddressLines))
{
return "Enter Address.";
}
return null;
}
static bool IsStringMissing(string value)
{
return
String.IsNullOrEmpty(value) ||
value.Trim() == String.Empty;
}
#endregion // Validation
誰でも私の問題の解決策を見つける..