gpt4 book ai didi

MVVM - 如何将 ViewModel 包装在 ViewModel 中?

转载 作者:行者123 更新时间:2023-12-03 10:49:09 33 4
gpt4 key购买 nike

首先,我看过this post并没有找到我的问题的答案。

我不确定这是否是汇总 型号 类或聚合 查看型号 类,但这就是我所拥有的:

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

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

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”对象包装在 中查看型号 ,
这样我就可以将它绑定(bind)到 View 。

这就是我想做的事情:
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”,即 。型号 ? 'OrderInfoDTO' 也是一个模型吗? 'OtherClass' 呢?
  • 如何处理 CustomerViewModel 类中的“OrderInfoDTO”?我是否也为它创建一个“ViewModel”?我在哪里创建“OrderInfoDTO” View 模型???如果现在有人更新客户并设置“OrderInfoDTO”值会发生什么?
  • 如何处理 CustomerViewModel 类中的“OtherClass”列表?我要为它创建一个 ObservableCollection 吗?如果有人想要删除其中的项目或更新其中的项目或向其中添加项目,会发生什么?
  • 最佳答案

    这样想:

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

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

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

    关于MVVM - 如何将 ViewModel 包装在 ViewModel 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11773555/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com