最近写了一些 MVVM 框架的文章,翻了一些 Microsoft Docs 的文档,顺便就对 MVVM 本身来了兴致,想看看更多当年相关的文档。在 MVVM 出现后十多年,我在不同的场合见到过多种 MVVM 的实现方式,也看到过各种 MVVM 框架的多次改进(这些框架通常包含多个用于实现解耦体系结构的服务,在一定程度上使 MVVM 的确切定义变得模糊),这些都让我对 MVVM 的理解变得多样化。这种情况下重温一下 MVVM 的文档也并不是毫无意义。

在 Microsoft Docs 网站上搜 “MVVM” 关键字有 200 多个结果,搜 ViewModel 关键字有 1400 多个结果,要全部看完显然太多。我一边回顾/重温,一边整理了一些有趣的文档以供参考。

1. MSDN 杂志

首先是 MSDN 杂志。在发行 30 多年后,MSDN 杂志完成了它的使命。今天我们仍可以在 Microsoft Docs 上找到当年的 MSDN 杂志的存档,其中关于 MVVM 的内容也有不少。虽然也有介绍如何使用 MVVM 框架的文章,但难道使用 MVVM 就一定要用框架吗,MVVM 岂是如此不便之物。下面我只列出了 MSDN 杂志中关于 MVVM 本身的内容。部分中文翻译的文章我直接给出中文地址,其它则是英文原文。

2. Prism

接下来看看 Prism。Prism 本来由微软 patterns & practices 团队领导,后来 离家出走,现在的新家在 Github,也有了独立的 官方文档。虽然分开了,可是微软倒是挺念旧,搬了新家也带着 Prism 的旧文档。可别以为这份 2014 年的旧文档年纪大了就没用了,先来看看这个 6 岁的老同志的介绍:

Prism以示例和文档的形式提供指导,帮助您轻松设计和构建丰富、灵活、易于维护的 Windows Presentation Foundation(WPF)桌面应用程序。使用包含重要架构设计原则(如关注点分离和松耦合)的设计模式,Prism可以帮助您使用松散耦合组件设计和构建应用程序,这些组件可以独立演化,但可以轻松无缝地集成到整个应用程序中。简而言之,这些应用程序是“为持久而构建”和“为改变而构建的”。这些类型的应用程序被称为复合应用程序。

Prism 并不仅仅是一个 MVVM 框架,它还是微软曾经给出的最好的 Wpf 实践指导。这份总建议阅读时间超过 7 小时的文档是微软 patterns & practices 团队交给 Wpf 开发者的最后的波纹。它解释了 Wpf 不同于 WinForms 的 UI交互,并介绍了架构设计原则、包含 MVVM、依赖注入在内的多种设计模式以及 Prism 的使用和实现原理,还有各种模式的代码示例,通过阅读这些文档,我敢保证,你的英语会变好一些。

上面的是 Prism 5 的文档, 其实 Prism 4 的文档也差不多,我在博客园上找到一份 Prism 4 的文档翻译:

Prism - 随笔分类 - 西夏 - 博客园

还有这份08年的文档,介绍了 Prism 最初的概念:

Prism (Composite Application Guidance for WPF)

3. Xamarin 中的 MVVM

近几年 Xamarin 的文档颇有活力,其中关于也有几篇关于 MVVM 的内容:

4. 数据绑定

大致上关于 MVVM 的文档就是上面这些了。另外还需要确保数据绑定和命令的知识,它们是 MVVM 最基础的概念,所以这方面的文档也可以看一看。

关于数据绑定,由于是 XAML 平台的基础,各个平台的文档都写得很详细。Wpf 的数据绑定文章写在一篇里,预计阅读时间长达38分钟:

Data binding overview in WPF

Xamarin 的数据绑定文档相对友好,分成多篇文章:

Xamarin.Forms 数据绑定

比起 Wpf 和 Xamarin,我觉得 Uwp 的文档更有趣些,虽然 Uwp 的数据绑定和 Wpf 的有很多不同,但也很值得参考:

5. 其它

在稍微复杂一些的 XAML 中一个元素可能很难搞清楚自己的 DataContext,因为这涉及它的逻辑树、Parent 的DataContext、DataTemplete 等。总之,使用 Binding 的元素需要搞清楚自己的定位。所以了解一下 Data TemplatingTrees in WPF 对做好 DataBinding 也会有帮助。

另外,只有少量的控件有对 ICommand 的处理,所以通过 使用行为 将数据和事件转换为 Command 的调用是实现 MVVM 必不可少的技能。

6. 最后

写这篇文章的过程简直成了大型考古,很开心有机会重温这些当年帮了我很多的文档。可喜的是十年前的文章对 XAML 开发居然还有用,可悲的是十年前的文章对 XAML 开发居然还有用。

Microsoft Docs 保存了多年来微软各种技术文档的存档,有兴趣的话你也可以在这里寻找到当年的回忆。

[Windows] 在 Microsoft Docs 网站中挖掘 MVVM 的各种学习资源的更多相关文章

  1. 在 Windows Azure 网站中进行纵向扩展和横向扩展

    编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...

  2. 探索 Windows Azure 网站中的自动伸缩功能

     去年10月,我们发布了若干针对 WindowsAzure平台的更新,其中一项更新是添加了基于日期的自动伸缩调度支持(在不同的日期设置不同的规则). 在这篇博客文章中,我们将了解自动伸缩的概念,并 ...

  3. 在 Windows Azure 网站中配置动态 IP 地址限制

    我们最近对 Windows Azure 网站进行了升级,并启用了IIS8的动态 IP 限制模块.现在,开发人员可以为其网站启用并配置动态 IP 限制功能(或简称 DIPR). 可以通过以下链接查看此 ...

  4. 进一步探索:Windows Azure 网站中解锁的配置选项

     编辑人员注释: 本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 在 Windows Azure 网站 (WAWS) 中管理网站时,许多选项可使用 Azu ...

  5. 禁用 Windows Azure 网站中的 ARR 实例关联

    编辑人员注释: 本博客文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 在 Windows Azure 网站中设置网站的多个实例是横向扩展网站的绝佳方式,Azur ...

  6. Freezable 对象概述 | Microsoft Docs

    原文:Freezable 对象概述 | Microsoft Docs Freezable 对象概述Freezable Objects Overview 2017/03/30 本文内容 什么是可冻结的? ...

  7. Windows 8.1——将网站固定到开始菜单,自定义图标、颜色和Windows推送通知

    记得在IE 9和Windows 7刚出来那会儿我写过一篇文章来介绍如何自定义网站将其固定到Windows的任务栏上,同时自定义图标及任务内容.那个功能在IE 9中被称之为JumpList.http:/ ...

  8. 快速找出网站中可能存在的XSS漏洞实践

    笔者写了一些XSS漏洞的挖掘过程记录下来,方便自己也方便他人. 一.背景 在本篇文章当中会一permeate生态测试系统为例,笔者此前写过一篇文章当中笔者已经讲解如何安装permeate渗透测试系统, ...

  9. 关于网站中引用COM组件的部署问题

    网站中引用了(PPT V14.0,即部署的服务器需要安装Office2010的)COM组件, 因此该功能对服务器有一定的环境要求: 1.安装Office2010,并激活. 2.配置: 1)开始-运行- ...

随机推荐

  1. VBA_50段代码总结

    ''                                                          30个有用的VBA代码 '目录: '1--合理使用数组:'2--一次保存并关闭所 ...

  2. DateUtil-1

    /** * @Title: DateUtil.java * @Package com.jd.big.data.dao.dashboard.util * @Description: 日期工具 * @au ...

  3. mybatis foreach collection

    原文传递:https://blog.csdn.net/qq_24084925/article/details/53790287 foreach元素的属性主要有 item,index,collectio ...

  4. 关于BigDecimal转String的准确性问题

    case 1: String str=new BigDecimal(123.9).toString() 输出str:123.90000000000000568434188608080148696899 ...

  5. Socket 连接错误及原因

    ECONNABORTED   该错误被描述为"software caused connection abort",即"软件引起的连接中止".原因在于当服务和客户 ...

  6. docker学习汇总

    学习思路: l Docker是什么? l Docker有什么特点? l Docker 怎么用? l 不论什么知识框架都要以官方文档为主 一.认识docker Docker的概念 Docker是一个开源 ...

  7. git , repo out off memory

    解决方法,建立swap # dd if=/dev/zero of=/root/myswapfile bs=1M count=1024 1024+0 records in 1024+0 records ...

  8. jquery 的 change() 方法的使用

    w3c 中的定义:链接  <a>http://www.w3school.com.cn/jquery/event_change.asp<a> jQuery 事件 - change ...

  9. Single Depth peeling 顺序无关渲染(OIT)

    什么是顺序无关渲染 在3D渲染中,物体的渲染是按一定的顺序渲染的,这也就可能导致半透明的物体先于不透明的物体渲染,结果就是可能出现半透明物体后的物体由于深度遮挡而没有渲染出来.对于这种情况通常会先渲染 ...

  10. sublime 3 phpfmt配置(大括号对齐)

    默认选项:  default: phpfmt.sublime-settings:         {         "version": 2,         "php ...