【问题标题】:What are the common relationships between Views, Models, and ViewModels?视图、模型和视图模型之间的常见关系是什么?
【发布时间】:2011-09-03 12:18:22
【问题描述】:

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

我们对它的第一次破解为任何给定视图启用了多个 ViewModel。每个 ViewModel 都是我们模型中每个对象的中间层。

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

我开始觉得这很疯狂,所以我将 View 和 ViewModel 之间的关系设为 1:1。

综上所述,我有一个包含两个组成部分的问题: 使用 MVVM,Views 和 ViewModels 之间的共同关系是什么? (此处重点介绍 Windows Phone 7 开发,以防它与 ASP.NET、WPF 或 Silverlight 有任何不同)

作为该问题的一个可能的补充:假设 1:1 关系通常是正确的或被接受的:如果您正在处理类似 Pivot 控件或 Panorama 控件的东西,您通常会给每个PivotItemPanoramaItem 自己的 ViewModel?

【问题讨论】:

    标签: silverlight xaml windows-phone-7 mvvm


    【解决方案1】:

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

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

    ViewModel 将模型中的数据提供给 View。 View 应该只用于显示它从 ViewModel 获得的数据。尽量减少视图中的代码,并且只与渲染控制元素有关。 ViewModel 负责从任何数据源查询数据,然后提供 View 可以挂钩的公共属性。

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

    【讨论】:

    • 非常感谢您的直截了当的回答,它帮助了很多!
    猜你喜欢
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 2015-04-11
    • 2012-06-28
    相关资源
    最近更新 更多