我正在与设计师合作开发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?
答案 0 :(得分:3)
在MVVM中,每个View通常都有一个ViewModel(存在例外)。 View通常“绑定”到ViewModel,ViewModel是视图和数据模型之间的粘合剂。您的视图可以包含多个控件,每个控件都将绑定到ViewModel上的特定属性(即数据源)。一旦更新了其中一个属性(通过C#中的INotifyPropertyChanged接口),ViewModel将通知View。
在考虑ViewModel时,不要将其视为每个控件的单个ViewModel。想一想控件绑定到共享ViewModel的单个属性。
ViewModel提供从模型到View的数据。视图应仅用于显示从ViewModel获取的数据。将视图中的代码保持为最小值,仅与渲染控件元素相关。 ViewModel负责从任何数据源查询数据,然后提供View可以挂钩的公共属性。