IDataErrorInfo со сложными типами - PullRequest
2 голосов
/ 17 сентября 2009

У меня есть объект Address, который определяется следующим образом:

public class Address
{
    public string StreetNumber { get; set; }
    public string StreetAddress { get; set; }
    public string City { get; set; }
    public string PostalCode { get; set; }
}

Довольно просто. По совету ответ на другой вопрос Я спросил, я имею в виду это сообщение в блоге, когда связываю мой пользовательский интерфейс с объектом типа Person (который содержит поле Address MailingAddress).

Проблема в том, что метод интерфейса IDataError не проверяет ни одно из свойств типа Address.

public string this[string columnName]
{
    get
    {
        string result = null;

        // the following works fine
        if(columnName == "FirstName")
        {
            if (string.IsNullOrEmpty(this.FirstName))
                result = "First name cannot be blank.";
        }
        // the following does not run 
        // mostly because I don't know what the columnName should be
        else if (columnName == "NotSureWhatToPutHere")
        {
            if (!Util.IsValidPostalCode(this.MailingAddress.PostalCode))
                result = "Postal code is not in a know format.";
        }
        return result;
    }
}

Итак, очевидно, я не знаю, каким будет columnName ... Я прошел через это, и это никогда не было чем-то иным, кроме публичных свойств (внутренних типов). Я даже пытался разобраться с таким утверждением, как:

if (columnName.Contains("Mailing") || columnName.Contains("Postal"))
    System.Windows.Forms.MessageBox.Show(columnName);

Все безрезультатно.

Есть что-то, что я пропускаю?

Ответы [ 2 ]

3 голосов
/ 23 сентября 2009

Вам необходимо определить IErrorInfo для всех классов, для которых вы хотите предоставить сообщения об ошибках.

0 голосов
/ 17 января 2010

Взгляните на мой ответ здесь .

Это объясняет, как использовать связыватель моделей для добавления проверки на уровне класса вашей модели без использования IDataError - что, как вы видели здесь, может быть довольно неуклюжим Он по-прежнему позволяет использовать атрибуты [Обязательные] или любые другие пользовательские атрибуты проверки, но позволяет добавлять или удалять отдельные ошибки модели. Для получения дополнительной информации о том, как использовать аннотации данных, я настоятельно рекомендую этот пост от Скотта Гу .

...