代码之家  ›  专栏  ›  技术社区  ›  Davy8

在MVVM中,如何保持视图逻辑不在模型中,而业务逻辑不在视图模型中?

  •  6
  • Davy8  · 技术社区  · 15 年前

    如果不在我的模型中添加一堆特定于UI的内容(如InotifyPropertiesChanged和InotifyCollectionChanged),或者创建大量不同的事件,并执行一系列感觉像是特定于UI并且应该远离模型的事情,我就无法很好地了解如何将模型中的更改通知给视图模型。

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

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

    1 回复  |  直到 13 年前
        1
  •  8
  •   Tim Cooper    13 年前

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

    如果有什么原因你不想把它放在这个水平上,那就好了。您可以将它放在更高的级别,如服务层或UI层。但是,您需要确保对数据结构的所有更改也通过该层发生。

    推荐文章