恐怕,你把一些事情搞混了。MVVM的基础是
- 模型 - 包含应用程序正在使用的数据。它应该尽可能简单。
- ViewModel - 反映应用程序的状态并包含业务逻辑。这是业务层。
- View - 解释 ViewModel 以提供业务层及其状态的可视化表示。
通过这三个部分,很容易提供关注点分离和解耦架构。如果您想阅读更多内容,请单击此处。
回到你的问题:
在这种特定情况下,有两个模型(数据类)称为 Group 和 Contact。该组包含一个联系人列表。他们都在实现 INotifyPropertyChanged 接口。
这有点奇怪。通常,您不需要INotifyPropertyChanged
在模型类中实现,因为 VM 应该处理来自视图的值更改。
但是可以想象在模型层中也有这种机制。但是由于您不想跟踪该层上的更改并且恕我直言,VM 应该注意,因此您不需要它。
[...] 在绑定到 xaml 或为每个模型(如 GroupViewModel 和 ContactViewModel)创建 ViewModel [...]
是的,这通常是方法。对于应该传递给视图层的每个模型类,您将创建一个ViewModel
.
[...] 而不是 ObservableCollections 有一个列表。
这绝对是一个否。如果您使用 a List<T>
,视图将不会知道对集合的更改(添加、删除)。
最好的方法是什么(设计明智)?我应该将模型或视图模型绑定到 xaml 吗?
只需坚持 MVVM。视图知道 VM,但 VM 不知道视图。此外,VM 知道模型,但模型不知道它。这意味着,您应该始终将 VM 绑定到视图。
编辑
以下是完全合法的。
public class Address : ViewModelBase // implements INotifiedPropertyChanged a.s.o.
{
public string Street { /* you know what comes here */ }
public string ZipCode { /* ... */ }
public string City { /* ... */ }
/* more properties */
}
public class Person : ViewModelBase
{
public string Name { /* ... */ }
public Address Address { /* ... */ }
}