显示有关MVVM中的集合项的补充信息

时间:2011-08-01 08:47:07

标签: wpf mvvm observablecollection

WPF和MVVM的新手,并尝试着解决正常的做事方式。

假设我有一个可观察的客户对象集合。我可以将ListView或ItemsControl绑定到此,它们都显示正常。

现在说我有一些关于未存储在客户对象中的每个项目的补充信息。假设某个特价可能已开启,某些客户有资格获得此优惠,但此标志不会保留在客户对象中。

在列表中显示此补充信息的标准方法是什么?

我的想法是在我的viewmodel中创建一个包含客户对象和此标志的新结构。然后,我可以将列表直接绑定到此集合,并将各种显示组件绑定到相应的struct成员。

然而,当我已经有一个ObservableCollection的客户时,这似乎有点浪费。如果我希望新列表“实时”,那么我需要新的集合来订阅并响应在底层客户集合中添加/删除。

这是这样做的吗?或者有什么方法可以分别以某种方式维护offer标志,但仍然在我的ListView中绑定它们?

非常感谢

1 个答案:

答案 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实例的集合创建CustomerViewModelCustomer个实例,如果存在,则会找到Offer

ObservableCollection<CustomerViewModel>可以很容易地绑定到您的视图中。