這個問題在過去的幾周或幾個月裏一直是我的頭腦,我真的不知道什麼是最好的解決方案。是否將我的DTO暴露給認爲不正確的視圖?
隨着我們使用視圖模型來公開數據視圖的MVVM圖案。例如,如果我想向用戶展示產品的詳細信息,我將在視圖模型中創建特定的屬性並填充它們。然後通過綁定,視圖將能夠從這些屬性獲取數據。像這樣:
<StackPanel>
<TextBlock Text="Prodcut Name:" FontWeight="Bold" />
<TextBlock Text="{Binding Path=ProductName}" />
<TextBlock Text="Price:" FontWeight="Bold"/>
<TextBlock Text="{Binding Path=Price}"/>
<TextBlock Text="Added Date:" FontWeight="Bold" />
<TextBlock Text="{Binding Path=Date}"/>
</StackPanel>
在視圖模型中,我將檢索我想要顯示的數據。我將得到像產品DTO這樣的數據,這將在視圖中具有所需的屬性。
this.productDTO = getData();
所以我的問題是,我們可以直接從視圖模型綁定到dto嗎? 視圖模型:
private ProductDTO product;
public string ProductName
{
get { return this.product.Name; }
set { this.product.Name = value; }
}
public string Price
{
get { return this.product.Price; }
set { this.product.Price = value; }
}
我的想法,露出DTO是不是一件好事.. 但如果它會救我脫離不必從DTO的所有屬性映射到視圖模型..
我認爲在MVVM和View設計的模型之間插入代碼的最好方法是使用T4模板自動生成自定義類型描述符。 [這是一個很好的出發點](http://www.scottlogic.co.uk/blog/colin/2009/08/declarative-dependency-property-definition-with-t4-dte/),它描述瞭如何輕鬆創建依賴屬性。我重新編寫了它來創建自定義類型描述符,這些描述符並不難編碼。 VS2011在編譯器中有一些超級甜美的東西,使其更加簡單;看看Anders在Build上給出的演講,瞭解更多信息。 – Will