如果不在我的模型中添加一堆特定于UI的内容(如InotifyPropertiesChanged和InotifyCollectionChanged),或者创建大量不同的事件,并执行一系列感觉像是特定于UI并且应该远离模型的事情,我就无法很好地了解如何将模型中的更改通知给视图模型。
否则,我只需要复制视图模型中的所有业务逻辑,以确保一切都是最新的,那么拥有模型有什么意义呢?
在我的模型中,有一个棘手的问题是“类别”类的属性。您可以将其视为树结构,并且该属性是所有叶节点子代。在这个模型中,属性是通过它的所有子代递归生成的,这一切都很好。然而,视图模型需要绑定到该属性,并且需要知道它何时更改。我应该更改模型以适应视图模型吗?如果我这样做了,那么视图模型此时不会真正做任何事情,模型会发出所有必要的更改通知,视图可以直接绑定到模型。另外,如果模型是我没有来源的东西,我该如何解决这个问题?
我不同意。 INotifyPropertyChanged 和 INotifyCollectionChanged 是特定于用户界面的。它们位于未绑定到任何特定UI堆栈的名称空间和程序集中。出于这个原因,我通常将这种行为放在尽可能低的系统中(通常是数据层)。
INotifyPropertyChanged
INotifyCollectionChanged
如果有什么原因你不想把它放在这个水平上,那就好了。您可以将它放在更高的级别,如服务层或UI层。但是,您需要确保对数据结构的所有更改也通过该层发生。