视图、模型和 ViewModel 之间有哪些常见关系?

2024-01-12

我正在与设计师一起开发 Windows Phone 7 应用程序。我使用 XNA 进行了 C# 开发,所以我了解 C#,但不熟悉模型/视图/ViewModel 架构。

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

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

这对我来说开始看起来很疯狂,所以我将 View 和 ViewModel 之间的关系设置为 1:1。

综上所述,我有一个包含两个部分的问题: 使用 MVVM,View 和 ViewModel 之间的常见关系是什么? (此处重点关注 Windows Phone 7 开发,以防它与 ASP.NET、WPF 或 Silverlight 有所不同)

作为该问题的一个可能的补充:假设 1:1 关系是普遍正确或可接受的关系:如果您正在处理类似Pivot控制或Panorama控制,你通常会给每个PivotItem or PanoramaItem它自己的视图模型?


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

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

ViewModel 将模型中的数据提供给视图。 View 只能用于显示从 ViewModel 获取的数据。将视图中的代码保持在最低限度,并且仅与渲染控制元素相关。 ViewModel 负责从任何数据源查询数据,然后提供 View 可以挂钩的公共属性。

This MSDN链接 http://msdn.microsoft.com/en-us/magazine/dd419663.aspx有一篇非常详细的文章,但你可以得到一个很好的概要维基百科 http://en.wikipedia.org/wiki/Model_View_ViewModel.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

视图、模型和 ViewModel 之间有哪些常见关系? 的相关文章

  • 如何使取消按钮像“X”按钮一样工作?

    在我的 XAML 文件中 我有一个窗口 我试图将其设置为无论用户单击 X 按钮还是单击 取消 按钮 行为都是相同的 我的缩写代码如下 public partial class Dialog Window private void Windo
  • Windows Phone 7 图表/图形控件

    我们正在开发一个 Windows Phone 7 原型应用程序 并且需要一个图形 图表控件来使用 我们看了银光工具包 http silverlight codeplex com 其中有一些看起来效果很好的控件 但是 我们无法让它发挥作用 每
  • 如何针对 Google Chrome 调试 Silverlight

    有谁知道如何从 Visual Studio 调试在 Google Chrome 中运行的 Silverlight 2 应用程序 即使在确定之后Chrome是调试浏览器 https stackoverflow com questions 59
  • Silverlight 中的应用程序范围字体资源

    我想看看是否可以在 Silverlight 控件中使用应用程序范围的字体 这些字体可以在 application resources 中设置 然后在整个应用程序中使用 他们不需要指定字体的其他内容 例如粗体或斜体 只需指定名称即可 大多数情
  • 如何在 MVVM 中播放声音和动画

    我读过很多关于播放声音 动画的最佳方式的博客 但如果可能的话 我希望看到一个关于如何完成此操作的简化示例 以便我更好地理解 所以根据我对 MVVM 的理解 视图 gt 声音和动画 ViewModel gt 如果某个值是 true 我想在视图
  • 从 Windows Phone 7 中的 Webbrowser 控件检索选定的文本

    当使用 Tap 选择它时 我尝试从 Windows Phone 7 中的 Webbrowser 控件检索选定的文本 还想在选择文本时删除复制图标 按住点击时 我想确认网络浏览器控件有任何选定的文本 我怎样才能在那里存支票 我还想突出显示网络
  • MVVM 中模型的职责是什么?

    我一直对 模型 应该或不应该包含什么感到有点困惑 教程和示例经常相互矛盾 到目前为止 我一直在谨慎行事 我的模型只暴露 UI 内容 例如用于绑定到视图的属性以及验证逻辑 但是模型中包含其他业务逻辑是否可以接受 假设我想通过网络服务控制机械泵
  • C# 线程安全(特别是 MVVM/WPF)

    我想知道我需要做什么才能使模型在 MVVM 中线程安全 假设我有以下类 它被实例化为单例 public class RunningTotal INotifyPropertyChange private int total public in
  • 将 XAML 文件转换为 BitmapImage

    我想创建一个位图图像具有所需的分辨率XAML 文本文件 我怎样才能做到这一点 thanks 要加载 Xaml 文件 Stream s File OpenRead yourfile xaml Control control Control X
  • XAML 图标 - 如何使用?

    我有一些 XAML 格式的矢量图形文件 我想将它们用作 Silverlight 应用程序中的图标 按钮 我更喜欢的方法是使用 Image 控件并将其源属性设置为 xaml 文件 就像我可以使用常规位图图像一样 但这并不那么容易 我尝试将它们
  • Windows Phone 7 上的 App.config?

    各位 我正在 Windows Phone 7 上构建一个应用程序 我的应用程序需要一些配置 例如 Web 服务 URL 数据库名称 这些配置可能会在部署期间随时需要更改 但我不想重新构建应用 在WPF应用程序中 我经常将这些配置保存在App
  • 在wpf中快速生成ViewModel属性?

    看完之后本文 http msdn microsoft com en us magazine dd419663 aspx a 在我的中有以下代码PersonViewModel class public Jurisdiction Country
  • 使用 php 发送 Windows Phone 7 的推送通知

    我是一名网络开发人员 PHP 我想使用 PHP 搜索 Windows Phone 7 的推送通知 但结果始终是 NET 请有人可以帮助我 UPDATE 如何同时发送多台设备 因为延迟时间在1秒左右 所以如果我有1000个设备要推送 我可能需
  • WinRT 中的 ComposableAttribute 是什么?

    我试图了解 WinRT 的一些较低级别的部分是如何工作的 我遇到了ComposableAttribute这可能是我需要的关键 但是 那文档 http msdn microsoft com en us library windows apps
  • 列表框仅显示一项

    我有一个ListBox和一个带有字符串的类 每次用户单击应用程序中的添加按钮时 我都会创建该类的一个新实例并将其添加到绑定到的列表中ListBox 第一次单击 添加 按钮时 列表框显示第一项 但下次单击时不再显示两项 XAML 这是List
  • WP7中加粗的ProgressBar,怎么样?

    我正在制作一个应用程序 它有一个计数器和一个代表剩余时间的进度条 因此如果计数器达到 50 则进度条值为 50 到目前为止一切顺利 我制作了一个计数器总计的进度条动画并开始 我的问题是 如何使进度条变粗 线条本身太小 我的应用程序的 主要吸
  • 当 View 被渲染/实例化时通知 ViewModel

    我有一个自定义用户控件 ChartControl 我在我的 WPF 应用程序中使用 MainApp 我渲染如下
  • 如何让窗口最大化时所有控件按比例调整大小?

    当我单击最大化按钮时 窗口最大化 但控件未按比例调整大小 使控件相应调整大小的最佳方法是什么 我正在使用MVVM 这是我的代码
  • XAML:如何定义要在多个项目中使用的数据模板和样式

    我开始使用 WPF net 3 5 sp1 仅使用 VS 尚未混合 开发桌面应用程序 我现在的情况是 我在几个库中有一些通用的可重用组件 我可以在哪里定义样式和数据模板 以便它们可以在多个项目中重复使用 从而获得一致的外观和感觉 我看过 R
  • 配置 2 在按钮 swiftUI 中发出警报消息

    我要学习 swift 和 swiftUI 我申请按类别整理笔记 如果需要的话 你可以在我的 GitHub 中找到我的项目 https github com yoan8306 List Notes https github com yoan8

随机推荐

  • 命令历史记录的 Cygwin 快捷方式

    如何在 cygwin 中搜索命令历史记录 我不想一直按箭头键来执行控制台命令历史记录中的命令 如果您使用默认编辑模式 请执行 ctrl R 来回溯历史记录 如果你已经设置了set o vi 使用vi编辑模式 那么就是esc
  • 哪些 numpy 操作是复制的,哪些是变异的?

    是否有通用的经验法则来了解哪些操作numpy ndarray产生一个copy哪些值会就地改变它们 我对 numpy 还很陌生 我确信我最终会以艰难的方式学习 但我想知道是否存在驱动可变性的一般原则 可以帮助加快我的学习速度 原地变异的函数
  • 快速排序算法未正确分配主元

    我观看了快速排序算法的精彩可视化 http www youtube com watch v Z5nSXTnD1I4 http www youtube com watch v Z5nSXTnD1I4 我觉得我真的理解了快速排序背后的原理 并且
  • 图像尺寸与画布尺寸不匹配

    我做了这样的画布
  • VS Code PyLint 错误 E0602(未定义的变量)与 ProtoBuf 编译的 Python 结构

    我使用 Visual Studio 很长时间了 但它变得太复杂而难以维护 现在我尝试转向 VS Code 但它抛出了许多对我来说没有意义的 PyLint 错误消息 并且程序仍然按预期工作 这些错误主要发生在从 GoogleProtoBuf
  • Google Maps API,是否可以突出显示特定街道?

    是否可以使用 Google Maps API 突出显示街道 我能找到的唯一接近这种效果的东西就是在它们上面画线 但这工作量很大 而且更不准确 这些线条还将覆盖地名 我想要的是突出显示某些街道名称 就像您从 a 点导航到 b 点一样 例如 如
  • 属性字符串中的上标分

    我试图让我的标签看起来像这样 但是使用属性字符串 我设法得到了这个结果 My code NSString string NSString stringWithFormat 0 2f ask NSMutableAttributedString
  • 使用 Java 8 Streams 将地图的地图转换为列表

    我有一张地图 Map
  • 根据上下文启用或禁用验证

    介绍 我有两个TextBox在我看来 每个属性都绑定到我的视图模型中的某些属性 Property1 Property2 TextBox或者在某些布尔值和属性上启用 并使用进行验证IDataErrorInfo在视图模型中 视图中的一些样式 P
  • Android:以编程方式创建和发送 XML SOAP 请求

    您好 提前致谢 我找到了这个教程 我正在尝试模仿它 http lalit3686 blogspot com 2012 06 calling soap webservice using httppost html http lalit3686
  • 使用 NginX 和 Laravel:URL 重写

    我正在尝试在运行 CentOS 6 4 和 NginX 1 8 的 VPS 上设置 Laravel 框架 我可以让其他一切都完美工作 但我无法让更干净的 URL 工作 例如使用 website com home 而不是 website co
  • 如何在WebView Windows 10 UWP中调用javascript?

    我正在尝试在 WebView 中加载 JavaScript 来进行一些计算并以字符串形式获取输出 我尝试使用以下代码 string htmlFragment
  • 确定 JavaScript 中浏览器窗口的位置?

    由于各种愚蠢的原因 我希望能够检测屏幕上浏览器窗口的矩形 标题栏等等 这可能吗 还是 JavaScript 仅限于其页面的视图端口 Edit 我可能不清楚 但视图端口是窗口中可见的页面部分 这可能不是浏览器中常用的术语 但在图形中很常见 对
  • R如何在涉及3个变量的情况下创建类似数据透视表的数据框?

    我在 R 中有以下数据框 它为我提供了客户 1 2 和 3 的交易记录 每行显示交易已进行的期间类型以及花费的金额 id lt c 1 2 3 1 1 2 3 2 2 period lt c calib valid valid calib
  • C++:将函数分配给 tr1::function 对象

    我们的一个类提供了 tr1 function 回调对象 但是 当我尝试为其分配成员函数时 出现编译器错误 以下示例未经测试 仅用于说明 Foo h class Foo public Foo std tr1 function
  • 使用 foreach 循环清除 PHP 数组值的效率

    哪个对于清除数组中的所有值更有效 第一个需要我每次在第二个示例的循环中使用该函数 foreach array as i gt value unset array i Or this foreach blah blah as blah foo
  • 如何从layout.xml中删除默认的cardview边框

    我无法删除 CardView 的默认边框 以前有人遇到过这个问题吗 两条边界线重叠 CardviewDesign xml
  • 处理大量文本时防止内存问题

    我编写了一个程序 可以分析项目的源代码并根据代码报告各种问题和指标 为了分析源代码 我加载项目目录结构中存在的代码文件并从内存中分析代码 该代码在传递给其他方法进行进一步分析之前会经过大量处理 处理代码时 代码会传递给多个类 有一天 我在我
  • 谷歌地图dequeueBuffer:BufferQueue已被放弃

    我在使用 Google 地图小部件时遇到了一些问题 简而言之 我有 3 个页面 带有底部导航栏的主页 地图页面 脚手架主体中带有 GoogleMap 的基本状态小部件 以及另一个页面 每次我从地图页面切换得太快时 我都会收到此错误 并且整个
  • 视图、模型和 ViewModel 之间有哪些常见关系?

    我正在与设计师一起开发 Windows Phone 7 应用程序 我使用 XNA 进行了 C 开发 所以我了解 C 但不熟悉模型 视图 ViewModel 架构 我们的第一个破解是为任何给定视图激活多个 ViewModel 每个 ViewM