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

时间:2009-05-23 06:10:34

标签: wpf mvvm viewmodel business-logic

我无法弄清楚如何在我的模型中添加一堆UI特定的东西,如INotifyProperyChanged和INotifyCollectionChanged,或者创建大量不同的事件并做一堆感觉他们是特定于UI的东西,应该远离模型。

否则我只需复制视图模型中的所有业务逻辑,以确保所有内容都是最新的,然后是什么样的模型呢?

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

1 个答案:

答案 0 :(得分:8)

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

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