1

首先,我已经阅读了这篇文章,并没有找到我的问题的答案。

我不确定这是聚合模型类还是聚合ViewModel类,但这就是我所拥有的:

在我的 WPF(使用 Prism)应用程序中,我有一个视图“过滤客户视图”,它连接到服务并根据过滤器请求“客户”对象列表。

从服务返回的列表是这样的:

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"); }
    }
}

.

问题:

  1. 首先 - 'CustomerDTO' 是所谓的模型吗?'OrderInfoDTO' 也是一个模型吗?'OtherClass' 呢?
  2. 如何处理CustomerViewModel类中的“OrderInfoDTO”?我是否也为它创建一个“ViewModel”?我在哪里创建“OrderInfoDTO”视图模型???如果现在有人更新客户并设置“OrderInfoDTO”值会发生什么?
  3. 如何处理CustomerViewModel类中的“OtherClass”列表?我要为它创建一个 ObservableCollection 吗?如果有人想要删除其中的项目或更新其中的项目或向其中添加项目,会发生什么?
4

1 回答 1

0

这样想:

  1. 视图是您的 UI,您可以将视图模型中的元素绑定到使用 {Binding Path=, Mode=TwoWay -- 如果您想根据用户输入进行更新
  2. 模型只是数据,可以是记录集、文件、数据库记录等。因此 CustomerDTO 和 OrderInfoDTO 是模型。
  3. 视图模型是数据(模型)和 UI(视图)之间的链接。它将允许您更改数据,以便更容易在 UI 上呈现

您需要在所有可能在后台更改列表的情况下使用 ObservableCollection。

除非您需要视图来更新该数据,否则您不需要 OrderInfoDTO 的视图模型。如果您在其中显示带有 OrderInfoDTO 的 CustomerDTO 信息,那么将其作为 CustomerDTO 视图模型的属性就可以了。

于 2013-04-24T20:00:08.303 回答