使用WCF DTO类作为UI模型

问题描述:

我有以下DTO的定义: -使用WCF DTO类作为UI模型

[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一些援助就OK了直接引用WCF DTO类作为模型,或者我应该在别的包装这几个问题吗?
  2. 为什么Model.Categories出来为空创建AddProductDTO什么时候?*
  3. 什么是使用WPF/WCF/MVVM来填充列表是DTO的一部分的推荐的方法?

我个人更喜欢使用Model类我的数据对象,像AutoMapper到DTO的映射模型。这使我保持之类的东西验证(IDataErrorInfo)及模型对象的属性更改通知(INotifyPropertyChanged),而不必包括将/ WCF从

至于Model.Categoriesnull,我通常会设置时数据在第一次调用属性的get方法以避免此类问题时,将对象列为空白列表。

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

      return _categories; 
     } 
    } 
} 
+0

感谢您的建议,我改变了我的代码以反映这一点。但是,我仍然有问题需要直接在数据网格中输入。但是,似乎没有默认构造函数来允许我这样做。我想我将不得不将列表包装到另一个模型,即List ,但这似乎是很多工作要去,当它将要做的是包装一个字符串..... – lostinwpf 2012-01-18 10:20:18

+0

@lostinwpf你应该能够直接在DataGrid中输入来编辑列表中的字符串。如果它不适合你,我会建议发布有关你的问题的另一个问题,并确保包括你使用的代码。 – Rachel 2012-01-18 13:23:10