1

我已经汇总了诸如 Customer:Order:Product 之类的模型。

由于我的视图绑定到具有 ObservableCollection 类型的属性客户的 BillingViewModel

并且此集合中的一位客户有一个名为 ObservableCollection 的订单“列表”

并且此集合中的一个订单有一个名为 ObservableCollection 的产品“列表”

好吧,我需要 ObservableCollection 来进行数据绑定,但是域模型真的应该有 ObservableCollection 吗?通常它有一个

列表或 IEnumerable !

这是坏习惯还是有副作用?

我在上面添加了正确的解释:

class Customer
{
   int CustomerID {get;set;}
   ObservableCollection<Order> { get;set;}
}

class BillingViewModel
{
  ObservableCollection<Customer> _customers;

public BillingViewModel()
{

  Customers= GetAggregatedCustomersOrdersProductsFromRepository();

}

public ObservableCollection<Customer> Customers
{
   get{ return _customers;}
   set
{
  _customers = value;
  this.RaisePropertyChanged("Customers");

}
}

}

我希望它现在更清楚!我的 ViewModel 和 Model 中有 ObservableCollection!

4

2 回答 2

1

从我读过的示例看来,一种做法是在到达客户端时将您的域模型 Customer:Order:Product 重新排列为 MainViewModel:CustomerViewModel:OrderViewModel:ProductViewModel 。这将允许您将任何虚拟机标记为脏并仅在需要时保存。它还允许您将视图组合成许多视图,每个视图都由它们自己的 VM 驱动,因此如果稍后您决定将视图从一个大屏幕更改为多个模态,那将是相当无缝的。MainViewModel 的原因更像是一个控制器而不是一个 ViewModel,它的职责是获取域模型并将其分解为 VM,也可能是您的视图如何显示(分组或模态)的控制器,它还可以包含诸如 SaveAllDirty 之类的命令。

于 2010-05-22T14:12:40.703 回答
0

这取决于这些属性是否需要内置的更改通知。如果你有某种逻辑依赖于在那些改变状态时做某事,那很好。如果它只是为了支持数据绑定而该类本身不是 ViewModel,那么我认为这是一种不好的形式。

于 2010-05-21T18:04:35.860 回答