Аннотации данных и типы метаданных и «слияние значений» - PullRequest
0 голосов
/ 18 октября 2010

Я пытаюсь настроить проверку аннотации данных для объекта в моей модели, и это имеет особую необходимость.Я должен по существу взять некоторые дополнительные свойства, которые я добавляю, и объединить их, чтобы получить значение реального свойства.Например, у меня есть базовый объект:

Task {
    public DateTime? Due
}

Но моя форма имеет поля:

Task.DueDate
Task.DueTimeHour
Task.DueTimeMinute
Task.DueTimePostfix

Итак, я попытался:

Task {
    public string DueDate
    public string DueTimeHour
    public string DueTimeMinute
    public string DueTimePostfix
}

Что работает,но затем я хочу, чтобы модель автоматически заполняла значение Due проанализированным значением всех остальных.Я не знаю, как это сделать.

Мне бы пришлось переопределить метод получения / установки Due в классе собеседников метаданных, но этот класс не знал бы о дополнительных свойствах, которые яотдан в исходный класс.Кроме того, у меня есть чувство, что, если я буду связываться с ними, у меня будут проблемы с извлечением реальных значений из базы данных.

Поэтому я надеюсь, что кто-то здесь может иметь представление о том, как я могу добиться того, чего хочу.Если я делаю это совершенно неправильно, я был бы признателен за возвращение на правильный путь.

Заранее благодарен за любые предложения!

ОБНОВЛЕНИЕ

Итак, я мог бы найти решение для первой части, если исходный класс и класс собеседников по метаданным расширялись из другого базового класса, который содержит все свойства.Таким образом, оба класса видят свойства и могут их использовать.

Теперь мне трудно установить значение для свойства Due на основе других свойств.На этом фронте будет признательна помощь.

Ответы [ 2 ]

1 голос
/ 18 октября 2010

Вам просто нужно переопределить получение / набор ваших дополнительных свойств:

public string DueDate {
  get {return Due.Date.ToShortDateString();}
  set { Due.Date = DateTime.Parse(value); }
}
public string DueTimeHour{
  get {return Due.Hours}
  set { Due.Hours = Int32.Parse(value); }
}
...

Или я что-то пропустил?

0 голосов
/ 18 октября 2010

Итак, я понял это за счет только пары часов сна.Вот моя последняя версия кода, которая работает для всех, у кого могут возникнуть такие же проблемы в будущем:

public partial class Task {
    public DateTime DueDate {
        get {
            return (DateTime.Now);
        }
        set {
            this.Due = value;
        }
    }

    [Range(0, 23)]
    public byte DueTimeHour {
        get {
            return (0);
        }
        set {
            if (this.Due.HasValue) {
                this.Due = DateTime.Parse(this.Due.Value.ToShortDateString() + " " + value + ":00:00");
            };
        }
    }

    [Range(0, 59)]
    public byte DueTimeMinute {
        get {
            return (0);
        }
        set {
            if (this.Due.HasValue) {
                this.Due = DateTime.Parse(this.Due.Value.ToString("M/d/yyyy h") + ":" + value + ":00");
            };
        }
    }

    public string DueTimePostfix {
        get {
            return (string.Empty);
        }
        set {
            if (this.Due.HasValue) {
                this.Due = DateTime.Parse(this.Due.Value.ToString("M/d/yyyy h:m") + " " + value);
            };
        }
    }
}

В конечном итоге мне пришлось добавить get, чтобы заставить его работать, что вызывает у меня любопытство.Я надеялся обойтись только с set для каждого свойства, потому что я уже манипулировал значением Due, но без get это не сработало бы.Может быть, кто-то может мне это объяснить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...