WPF和MVVM的新手,并尝试着解决正常的做事方式。
假设我有一个可观察的客户对象集合。我可以将ListView或ItemsControl绑定到此,它们都显示正常。
现在说我有一些关于未存储在客户对象中的每个项目的补充信息。假设某个特价可能已开启,某些客户有资格获得此优惠,但此标志不会保留在客户对象中。
在列表中显示此补充信息的标准方法是什么?
我的想法是在我的viewmodel中创建一个包含客户对象和此标志的新结构。然后,我可以将列表直接绑定到此集合,并将各种显示组件绑定到相应的struct成员。
然而,当我已经有一个ObservableCollection的客户时,这似乎有点浪费。如果我希望新列表“实时”,那么我需要新的集合来订阅并响应在底层客户集合中添加/删除。
这是这样做的吗?或者有什么方法可以分别以某种方式维护offer标志,但仍然在我的ListView中绑定它们?
非常感谢
答案 0 :(得分:1)
使用MVVM模式时,ViewModel是“视图模型”,即它是一个与您当前视图非常相似的模型。
我可以看到为什么您可能希望基础模型单独存储商品和客户。
伪代码:
class MyModel
{
List<Offer> Offers {get; set;}
List<Customer> Customers {get; set;}
}
但是,您无法将ListView绑定到客户,并以某种方式将它们与您的商品相关联。 ViewModel的作用是塑造模型,以便更容易将其绑定到视图:
class CustomerViewModel
{
// the customer model
private Customer customer;
// and offer - might be null
private Offer offer;
// expose properties of the two above model objects here
}
您的视图模型会使用模型ObservableCollection
实例的集合创建CustomerViewModel
个Customer
个实例,如果存在,则会找到Offer
。
此ObservableCollection<CustomerViewModel>
可以很容易地绑定到您的视图中。