2012-08-02 56 views
1

首先,我已閱讀this post並沒有找到我的問題的答案。MVVM - 如何將ViewModel包裝在ViewModel中?

我不知道這是否是一個聚合型號類或聚合視圖模型類,但是這是我有:

在我的WPF(帶棱柱)應用程序,我有一個觀點「 過濾客戶查看',該服務連接到服務並基於過濾器請求'客戶'對象列表。

是從服務返回的列表是這樣的:

List<CustomerDTO> FilteredCustomers; 

而且CustomerDTO看起來是這樣的:

​​

而且OrderInfoDTO看起來是這樣的:

public class OrderInfoDTO 
{ 
    public Guid   OrderId; 
    public DateTime  OrderDate; 
    public int   NumberOfProducts; 
    public double  TotalAmountSpent; 
} 

OtherClass看起來是這樣的:

public class OtherClass 
{ 
    public Guid   Id; 
    public String  SomeText; 
} 

正如你所看到的 - 客戶可能會或可能不會有一個「最後訂單」,

我想換了「CustomerDTO」對象在ViewModel, ,以便我可以將它綁定到視圖。

這就是我想這樣做的:

public class CustomerViewModel : NotificationObject 
{ 
    private CustomerDTO _customerDTO; 

    public CustomerViewModel(CustomerDTO customerDTO) 
    { 
     _customerDTO = customerDTO; 
    } 

    public Guid CustomerId 
    { 
     get { return _customerDTO.CustomerId; } 
     set { _customerDTO.CustomerId = value; RaisePropertyChanged("CustomerId "); } 
    } 

    public String Name 
    { 
     get { return _customerDTO.Name; } 
     set { _customerDTO.Name = value; RaisePropertyChanged("Name"); } 
    } 

    public String Address 
    { 
     get { return _customerDTO.Address; } 
     set { _customerDTO.Address = value; RaisePropertyChanged("Address"); } 
    } 

    public String PhoneNumber 
    { 
     get { return _customerDTO.PhoneNumber; } 
     set { _customerDTO.PhoneNumber= value; RaisePropertyChanged("PhoneNumber"); } 
    } 
} 

問題:

  1. 首先 - 是 'CustomerDTO' 所謂的模式?並且'OrderInfoDTO'也是一個模型?那麼'OtherClass'呢?
  2. 如何處理我的CustomerViewModel類中的'OrderInfoDTO'?我也爲它創建一個'ViewModel'嗎?我在哪裏創建'OrderInfoDTO'視圖模型?如果現在有人更新客戶並設置'OrderInfoDTO'值,會發生什麼?
  3. 如何處理我的CustomerViewModel類中'OtherClass'的列表?我是否爲它創建一個ObservableCollection?如果某人想要刪除其中的項目或更新其中的項目或向其中添加項目,會發生什麼情況?
+0

WPF不會綁定到字段。僅屬性。因此,任何具有字段而不是屬性的POCO都不能用作模型。 – Will 2012-08-02 14:54:00

+0

你指的是哪一類?我的'ViewModel'類不綁定到POCO! – 2012-08-02 15:07:12

+0

'公共類CustomerDTO' – Will 2012-08-02 15:09:19

回答

0

想想這樣說:

  1. 看法是,你會從綁定視圖模型元素使用{綁定路徑=,模式=雙向您的用戶界面 - 如果你想更新基於用戶輸入
  2. 該模型只是數據,這可能是一個記錄集,文件,數據庫記錄等,所以CustomerDTO和OrderInfoDTO是模型。
  3. 視圖模型是您的數據(模型)和UI(視圖)之間的鏈接。它將允許您更改數據,以便更容易地在UI上呈現

您需要在所有存在可能在後臺更改列表的情況下使用ObservableCollection。

除非需要視圖來更新該數據,否則不需要OrderInfoDTO的視圖模型。如果您在其中展示OrderInfoDTO的CustomerDTO信息,那麼使其成爲CustomerDTO視圖模型的屬性將會很好。

相關問題