MVVM/WPF:使用ObservableCollection<;T>;作为域模型中的列表,这是好的还是坏的?

MVVM/WPF:使用ObservableCollection<;T>;作为域模型中的列表,这是好的还是坏的?,mvvm,model,viewmodel,observablecollection,generic-list,Mvvm,Model,Viewmodel,Observablecollection,Generic List,我有聚合模型,如客户:订单:产品 因为我的视图绑定到BillingViewModel,它的属性类型为ObservableCollection 这个集合中的一个客户有一个订单“列表” 命名可观测集合 这个系列中的一个订单有一个产品列表 命名可观测集合 我需要ObservableCollection用于数据绑定,但是域模型真的应该有ObservableCollection吗?通常它有一个 列表或IEnumerable 这是坏习惯还是有副作用 我在上面附加了一个正确的解释: class Custome

我有聚合模型,如客户:订单:产品

因为我的视图绑定到BillingViewModel,它的属性类型为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");

}
}

}
class客户
{
int CustomerID{get;set;}
ObservableCollection{get;set;}
}
类BillingViewModel
{
可观察收集的客户;
公共计费视图模型()
{
Customers=GetAggregatedCustomerOrdersProductsFromRepository();
}
公开收集客户
{
获取{return\u customers;}
设置
{
_顾客=价值;
本.提高资产变更(“客户”);
}
}
}

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

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

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

从我阅读的示例中,一种做法似乎是将域模型Customer:Order:Product放到客户端,然后将其重新排列到MainViewModel:CustomerViewModel:OrderViewModel:ProductViewModel中。这将允许您将任何VM标记为脏,并仅在需要时保存。它还允许您组合多个视图,每个视图都由自己的VM驱动,因此,如果以后您决定将视图从一个大屏幕更改为多个模态,它将是相当无缝的。MainViewModel的原因,与其说是ViewModel,不如说是控制器,它的职责是获取域模型并将其分解为VM,还可以是视图显示方式的控制器(分组或模式),它还可能包含SaveAllDirty等命令。

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

没有逻辑。我只是在视图中添加了一个订单,在我的BillingViewModel中,CurrentOrder被添加到SelectedCustomer中,就像SelectedCustomer.Orders.add(CurrentOrder)一样;然后立即更新我的订单数据网格。使用列表视图中没有更新:/n那么我可以如何处理您所说的坏表单…?如果您的BillingViewModel使用的是ObservableCollection,则没有任何问题。只有当您的对象不与视图交互时,才会让它们认为它是坏的形式。为什么它是坏的?:)域集合必须是列表或IEnumerable??没有逻辑。我只是在视图中添加了一个订单,在我的BillingViewModel中,CurrentOrder被添加到SelectedCustomer中,就像SelectedCustomer.Orders.add(CurrentOrder)一样;然后立即更新我的订单数据网格。使用列表视图中没有更新:/n那么我可以如何处理您所说的坏表单…?如果您的BillingViewModel使用的是ObservableCollection,则没有任何问题。只有当您的对象不与视图交互时,才会让它们认为它是坏的形式。为什么它是坏的?:)它写在哪里域集合必须是列表或IEnumerable??我不需要那些“脏”东西。当用户输入数据后按命令时,我的数据被保存。“…并将其重新排列为MainViewModel:CustomerServiceWModel:OrderViewModel:ProductViewModel…”这是我以前做的,它的总开销…我不需要那些“脏”东西。当用户输入数据后按命令时,我的数据被保存。“…并将其重新排列为MainViewModel:CustomerServiceWModel:OrderViewModel:ProductViewModel…”我以前做过此操作,其总开销。。。