如何将视图逻辑从模型和业务逻辑中排除在MVVM中的视图模型之外?

Dav*_*vy8 6 wpf business-logic mvvm viewmodel

我无法弄清楚如何在我的模型中添加一堆UI特定的东西,如INotifyProperyChanged和INotifyCollectionChanged,或者创建大量不同的事件并做一些感觉的事情,让视图模型得到模型更改的通知就像他们是UI特定的,应该远离模型.

否则,我只需要复制视图模型中的所有业务逻辑,以确保一切都是最新的,那么拥有模型的重点是什么呢?

我在模型中遇到的一个棘手的问题是"类别"类的属性.您可以将其视为树结构,属性是所有叶节点后代.在模型中,属性是通过递归方式生成所有它的子项,这一切都很好.但是视图模型需要绑定到该属性,并且需要知道它何时发生更改.我应该更改模型以适应视图模型吗?如果我这样做,那么视图模型此时并没有真正做任何事情,模型会引发所有必要的更改通知,视图可以直接绑定到模型.此外,如果模型是我没有源的东西,我将如何解决这个问题?

Ken*_*art 8

我不同意这一点,INotifyPropertyChanged并且INotifyCollectionChanged是特定于UI的.它们位于未绑定到任何特定UI堆栈的名称空间和程序集中.出于这个原因,我通常会尽可能地将这种行为放在系统中(通常是数据层).

如果有一些原因你不想把它放在那个级别,那很好.您可以将其放在更高级别,例如服务或UI层.但是,您还需要确保通过该层对数据结构进行所有更改.

  • .Net 4.0已将这些接口(包括ObservableCollection)移动到System.dll. (3认同)