Использование классов WCF DTO в качестве моделей в пользовательском интерфейсе - PullRequest
0 голосов
/ 17 января 2012

У меня есть следующее определение DTO: -

[DataContract]
public class AddProductDTO
{
   [DataMember]
   public string Code { get; set; }
   [DataMember]
   public List<string> Categories { get; set; }
}

и модель представления, которая в настоящее время имеет конструктор, следующим образом: -

public AddProdctViewModel()
{
   Model = new AddProductDTO();
}

AddProductDTO был добавлен в качестве ссылки на службу непосредственно в VisualStudio 2010

На мой взгляд, у меня есть (Xceed) таблица данных WPF, в которую я хотел бы иметь возможность вводить категории напрямую. В настоящее время его itemssource установлен в Model.Categories. Однако это не работает, поскольку значение Model.Categories равно нулю.

Это поднимает несколько вопросов, которые, я надеюсь, я могу получить некоторую помощь по

  1. В MVVM это нормально, чтобы напрямую ссылаться на класс DTO WCF в качестве модели, или я должен обернуть это во что-то еще?
  2. Почему Model.Categories становится нулевым при создании AddProductDTO? *
  3. Каков рекомендуемый способ использования WPF / WCF / MVVM для заполнения списка, который является частью DTO?

1 Ответ

2 голосов
/ 17 января 2012

Лично я предпочитаю использовать Model классы для своих объектов данных и что-то вроде AutoMapper для сопоставления DTO с моделями. Это позволяет мне сохранять такие вещи, как проверка (IDataErrorInfo) и уведомления об изменении свойств (INotifyPropertyChanged) для объекта Model, без необходимости включать эти данные при переходе в / из WCF

Что касается Model.Categories, являющегося null, обычно я устанавливаю объекты списка в пустой список при первом вызове метода свойства get, чтобы избежать подобных проблем.

public class ProductModel : INotifyPropertyChanged
{
    private List<string> _categories;
    public List<string> Categories 
    {
        get
        {
            if (_categories == null)
                _categories = new List<string>();

            return _categories;
        }
    }
}
...