【发布时间】:2012-07-31 04:38:58
【问题描述】:
首先,我已经阅读了this post 并没有找到我的问题的答案。
我不确定这是聚合的 Model 类还是聚合的 ViewModel 类,但这就是我所拥有的:
在我的 WPF(使用 Prism)应用程序中,我有一个视图“过滤客户视图”,它连接到服务并根据过滤器请求“客户”对象列表。 p>
从服务返回的列表是这样的:
List<CustomerDTO> FilteredCustomers;
CustomerDTO 看起来像这样:
public class CustomerDTO
{
public Guid CustomerId;
public String Name;
public String Address;
public String PhoneNumber;
public OrderInfoDTO LastOrderInformation;
public List<OtherClass> ListOfSomething;
}
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"); }
}
}
.
问题:
- 首先 - 'CustomerDTO' 是所谓的 Model 吗? 'OrderInfoDTO' 也是一个模型吗?那么“OtherClass”呢?
- 如何处理 CustomerViewModel 类中的“OrderInfoDTO”?我是否也为它创建一个“ViewModel”?我在哪里创建“OrderInfoDTO”视图模型???如果现在有人更新客户并设置“OrderInfoDTO”值会发生什么?
- 如何处理我的 CustomerViewModel 类中的“OtherClass”列表?我要为它创建一个 ObservableCollection 吗?如果有人想要删除其中的项目或更新其中的项目或向其中添加项目,会发生什么?
【问题讨论】:
-
WPF 不会绑定到字段。仅限属性。因此任何具有字段而不是属性的 POCO 都不能用作模型。
-
你指的是哪个类?我的“ViewModel”类未绑定到 POCO!
-
我的“视图”没有绑定到“CustomerDTO”(POCO)。它绑定到“CustomerViewModel”!
-
“首先 - 'CustomerDTO' 是所谓的模型吗?” “WPF 不会绑定到字段。仅限属性。因此,任何具有字段而不是属性的 POCO 都不能用作模型。”