2012-01-17 105 views
0

我有以下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的一部分的推薦的方法?

回答

2

我個人更喜歡使用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