0

私のプロジェクトでは、検証のために 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

誰でも私の問題の解決策を見つける..

4

1 に答える 1

0
      public string Error
    {
        get { return null; }
    }

    public string this[string columnName]
    {
        get
        {
            var error = string.Empty;
            switch (columnName)
            {
                case "Address.AddressLines":
                    if (string.IsNullOrEmpty(Address.AddressLines))
                        error = "Address.AddressLines Required";
                    break;


            }
            return error;
        }
    }

このコードを使用

于 2013-03-14T06:22:15.473 に答える