MVVM-视图模型/模型绑定
我对使用父子模型关系的MVVM的最佳实践有一些疑问 在这种特定情况下,有两种模型(数据类)称为组和联系人。该组包含联系人列表。他们都在实现INotifyPropertyChanged接口 在视图中,有一个使用DataTemplate显示层次结构的树视图,关联的ViewModel包含ObservableCollections属性 我想知道在这种情况下,什么是最佳实践设计。。。。在ViewModel中具有一个类似于上面的属性,该属性绑定到xaml,或者为每个模型创建一个ViewModel(如GroupViewModel和ContactViewModel),而不是具有列表的ObservableCollectionsMVVM-视图模型/模型绑定,mvvm,model,viewmodel,Mvvm,Model,Viewmodel,我对使用父子模型关系的MVVM的最佳实践有一些疑问 在这种特定情况下,有两种模型(数据类)称为组和联系人。该组包含联系人列表。他们都在实现INotifyPropertyChanged接口 在视图中,有一个使用DataTemplate显示层次结构的树视图,关联的ViewModel包含ObservableCollections属性 我想知道在这种情况下,什么是最佳实践设计。。。。在ViewModel中具有一个类似于上面的属性,该属性绑定到xaml,或者为每个模型创建一个ViewModel(如Grou
什么是最好的方式(设计方面)?我应该将模型或ViewModel绑定到xaml吗?恐怕您弄错了一些东西。MVVM的基础是
- 模型-包含应用程序正在处理的数据。它应该尽可能简单
- ViewModel—反映应用程序的状态并包含业务逻辑。这是业务层
- 视图-解释ViewModel以提供业务层及其状态的可视化表示
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),这样可以吗?我想那不太好。或者?当然可以。为什么不应该呢?我将在帖子中添加一个小示例。您应该绑定到视图模型。