Views,Models和ViewModels之间的常见关系是什么?

时间:2011-05-27 15:32:23

标签: silverlight xaml windows-phone-7 mvvm

我正在与设计师合作开发Windows Phone 7应用。我用XNA完成了C#开发,所以我知道C#但不熟悉Model / View / ViewModel架构。

我们的第一个破解是对于任何给定的视图都有多个ViewModel处于活动状态。每个ViewModel都是我们模型中每个对象的中间层。

例如:我们有一个“朋友”页面,其中ListBox显示了好友列表。所以我们创建了一个FriendsListViewModel来处理从模型中获取ObservableCollection<Friend>的XAML将绑定到的Pivot。页面中还有其他功能(导航到其他页面,激活半相关功能等),以便包含在FriendsPageViewModel中。

这对我来说开始变得疯狂,所以我在View和ViewModel 1:1之间建立了关系。

通过所描述的所有内容,我有一个包含两个组件的问题: 使用MVVM,Views和ViewModels之间的共同关系是什么? (专注于Windows Phone 7开发,以防它与ASP.NET,WPF或Silverlight有任何不同)

作为该问题的可能插件:假设1:1关系通常是正确的或被接受的:如果你正在处理Panorama控制或PivotItem控制之类的事情,那么您通常会为每个PanoramaItem或{{1}}提供自己的ViewModel?

1 个答案:

答案 0 :(得分:3)

在MVVM中,每个View通常都有一个ViewModel(存在例外)。 View通常“绑定”到ViewModel,ViewModel是视图和数据模型之间的粘合剂。您的视图可以包含多个控件,每个控件都将绑定到ViewModel上的特定属性(即数据源)。一旦更新了其中一个属性(通过C#中的INotifyPropertyChanged接口),ViewModel将通知View。

在考虑ViewModel时,不要将其视为每个控件的单个ViewModel。想一想控件绑定到共享ViewModel的单个属性。

ViewModel提供从模型到View的数据。视图应仅用于显示从ViewModel获取的数据。将视图中的代码保持为最小值,仅与渲染控件元素相关。 ViewModel负责从任何数据源查询数据,然后提供View可以挂钩的公共属性。

这篇MSDN link有一篇非常详细的文章,但你可以在wikipedia上得到一个很好的概要。