MVVM-视图模型/模型绑定

MVVM-视图模型/模型绑定,mvvm,model,viewmodel,Mvvm,Model,Viewmodel,我对使用父子模型关系的MVVM的最佳实践有一些疑问 在这种特定情况下,有两种模型(数据类)称为组和联系人。该组包含联系人列表。他们都在实现INotifyPropertyChanged接口 在视图中,有一个使用DataTemplate显示层次结构的树视图,关联的ViewModel包含ObservableCollections属性 我想知道在这种情况下,什么是最佳实践设计。。。。在ViewModel中具有一个类似于上面的属性,该属性绑定到xaml,或者为每个模型创建一个ViewModel(如Grou

我对使用父子模型关系的MVVM的最佳实践有一些疑问

在这种特定情况下,有两种模型(数据类)称为组和联系人。该组包含联系人列表。他们都在实现INotifyPropertyChanged接口

在视图中,有一个使用DataTemplate显示层次结构的树视图,关联的ViewModel包含ObservableCollections属性

我想知道在这种情况下,什么是最佳实践设计。。。。在ViewModel中具有一个类似于上面的属性,该属性绑定到xaml,或者为每个模型创建一个ViewModel(如GroupViewModel和ContactViewModel),而不是具有列表的ObservableCollections


什么是最好的方式(设计方面)?我应该将模型或ViewModel绑定到xaml吗?

恐怕您弄错了一些东西。MVVM的基础是

  • 模型-包含应用程序正在处理的数据。它应该尽可能简单
  • ViewModel—反映应用程序的状态并包含业务逻辑。这是业务层
  • 视图-解释ViewModel以提供业务层及其状态的可视化表示
有了这三个部分,就很容易提供关注点分离和解耦的体系结构。如果你想读更多

回到你的问题:

在这种特定情况下,有两种模型(数据类)称为组和联系人。该组包含联系人列表。他们都在实现INotifyPropertyChanged接口

这有点奇怪。通常,您不需要在模型类中实现
INotifyPropertyChanged
,因为VM应该处理视图中的值更改

但在模型层中也可以想象到这种机制。但是,由于您不想跟踪这一层上的更改以及VM应该注意的事项,所以您不需要它

[…]在绑定到xaml的ViewModel中有一个如上所述的属性,或者为每个模型创建一个ViewModel(如GroupViewModel和ContactViewModel)[…]

是的,这通常是一种方法。对于应传递给视图层的每个模型类,您将创建一个
ViewModel

[…]而不是有列表的可观察集合

这绝对不是。如果使用
列表
,视图将不会意识到集合的更改(添加、删除)

什么是最好的方式(设计方面)?我应该将模型或ViewModel绑定到xaml吗

只需坚持使用MVVM即可。视图知道VM,但VM不知道视图。此外,虚拟机知道模型,但模型不知道。这意味着您应该始终将VM绑定到视图

编辑

以下是完全合法的

public类地址:ViewModelBase//实现INotifiedPropertyChanged a.s.o。
{
公共字符串街{/*你知道这里有什么*/}
公共字符串ZipCode{/*…*/}
公共字符串城市{/*…*/}
/*更多属性*/
}
公共类人员:ViewModelBase
{
公共字符串名称{/*…*/}
公共广播地址{/*…*/}
}

感谢我的反馈,我的意思是,我不会有一个ObservableCollection,而是有一个ObservableCollection。我的错:)您认为绑定ViewModel比绑定xaml中的模型更好。这取决于视图或模式。可能存在一些场景(例如,小型应用程序),在这些场景中,创建虚拟机是不值得的。但是如果你坚持MVVM…是的…这是唯一的方法。这是一个基本的机制。然后,一个视图模型应该知道另一个视图模型(例如GroupViewModel将知道ContactViewModel),这样可以吗?我想那不太好。或者?当然可以。为什么不应该呢?我将在帖子中添加一个小示例。您应该绑定到视图模型。