最近写了一些 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 本身的内容。部分中文翻译的文章我直接给出中文地址,其它则是英文原文。

  • Patterns - WPF Apps With The Model-View-ViewModel Design Pattern

  • 使用 Model-View-ViewModel 的问题和解决方案

  • 用于 WPF 的 Model-View-Presenter-ViewModel 设计模式

  • 在 Windows 8 中使用 MVVM 模式

  • Maximizing the Visual Designer’s Usage with Design-Time Data

  • Leveraging Windows 8 Features with MVVM

  • 使用 MVVM 编写跨平台表示层

  • 使用 MVVM 编写可测试的表示层

  • 针对异步 MVVM 应用程序的模式:数据绑定

  • 针对异步 MVVM 应用程序的模式:命令

  • 针对异步 MVVM 应用程序的模式:服务

  • MVVM 应用程序中的多线程与调度

  • 最大限度地利用Roslyn体验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 的使用和实现原理,还有各种模式的代码示例,通过阅读这些文档,我敢保证,你的英语会变好一些。

  • Developer's Guide to Microsoft Prism Library 5.0 for WPF

  • 1: Introduction to the Prism Library 5.0 for WPF

  • 2: Initializing Applications Using the Prism Library 5.0 for WPF

  • 3: Managing Dependencies Between Components Using the Prism Library 5.0 for WPF

  • 4: Modular Application Development Using Prism Library 5.0 for WPF

  • 5: Implementing the MVVM Pattern Using the Prism Library 5.0 for WPF

  • 6: Advanced MVVM Scenarios Using the Prism Library 5.0 for WPF

  • 7: Composing the User Interface Using the Prism Library 5.0 for WPF

  • 8: Navigation Using the Prism Library 5.0 for WPF

  • 9: Communicating Between Loosely Coupled Components Using the Prism Library 5.0 for WPF

  • 10: Deploying Applications Using the Prism Library 5.0 for WPF

  • 11: Glossary for the Prism Library 5.0 for WPF

  • 12: Patterns in the Prism Library 5.0 for WPF

  • 13: Prism Library 5.0 for WPF

  • 14: Upgrading from Prism Library 4.1

  • 15: Extending the Prism Library 5.0 for WPF

  • 16: Code Samples Using the Prism Library 5.0 for WPF

  • 17: Getting Started Using the Prism Library 5.0 for WPF Hands-on Lab

  • 18: Publishing and Updating Applications Using the Prism Library 5.0 for WPF Hands-on Lab

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

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

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

Prism (Composite Application Guidance for WPF)

3. Xamarin 中的 MVVM

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

  • The Model-View-ViewModel Pattern

  • Using the Model-View-ViewModel (MVVM) pattern in a Windows Store business app using C#, XAML, and Prism

  • 第 18 章:MVVM

  • 从数据绑定到 MVVM

4. 数据绑定

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

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

Data binding overview in WPF

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

Xamarin.Forms 数据绑定

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

  • 数据绑定概述

  • 深入了解数据绑定

  • x:Bind 中的函数

  • 教程:创建数据绑定

  • 设计面图上以及用于原型制作的示例数据

  • 绑定分层数据和创建大纲/细节视图

  • 数据绑定和 MVVM

5. 其它

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

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

6. 最后

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

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

wpf mvvm框架_[Windows] 在 Microsoft Docs 网站中挖掘 MVVM 的各种学习资源相关推荐

  1. [Windows] 在 Microsoft Docs 网站中挖掘 MVVM 的各种学习资源

    最近写了一些 MVVM 框架的文章,翻了一些 Microsoft Docs 的文档,顺便就对 MVVM 本身来了兴致,想看看更多当年相关的文档.在 MVVM 出现后十多年,我在不同的场合见到过多种 M ...

  2. wpf mysql 框架_带有 WPF 和实体框架6的简单数据应用 - Visual Studio | Microsoft Docs

    使用 WPF 和 Entity Framework 6 创建简单的数据应用程序Create a simple data application with WPF and Entity Framewor ...

  3. 服务器连接硬盘出错,在服务器上使物理磁盘资源联机时出错 - Windows Server | Microsoft Docs...

    物理磁盘资源保持联机挂起状态,或者 Chkdsk 实用工具自动开始在运行 Windows Server 2008 的服务器上运行 09/15/2020 本文内容 本文可帮助修复将物理磁盘资源联机时可能 ...

  4. windows故障转移群集 文件服务器,为服务器故障转移群集中的 IIS Windows FTP - Windows Server | Microsoft Docs...

    如何在服务器故障转移群集中为 IIS Windows FTP 09/08/2020 本文内容 本文介绍如何为 Internet Information Services (服务器故障转移群集) IIS ...

  5. 微软打印机驱动服务器,无法通过 Windows Server 中的 Windows 更新来安装打印机驱动程序 - Windows Server | Microsoft Docs...

    打印机驱动程序无法通过 Windows Server 2019 Windows Server 2016 Windows Update 进行安装 12/07/2020 本文内容 本文提供了从 Windo ...

  6. 网络打印服务器记录打印文件,使用 CNAME 记录合并打印服务器 - Windows Server | Microsoft Docs...

    使用 DNS 别名合并打印服务器 (CNAME) 记录 09/08/2020 本文内容 本文介绍如何合并在 Microsoft Windows Server 2003 环境中运行的打印服务器. 适用于 ...

  7. mvvm框架_引入淘汰赛JavaScript框架(MVVM)

    mvvm框架 介绍 (Introduction) Knockoutjs (Knockout) is a JavaScript framework (Model View ViewModel or MV ...

  8. 64位计算机连接网络打印机驱动程序,为运行 64 位版本的打印机查找兼容的打印机Windows - Windows Server | Microsoft Docs...

    如何为运行 64 位版本的打印机的计算机查找兼容的打印机Windows 09/08/2020 本文内容 本文介绍如何为运行 64 位版本 Windows 的计算机查找兼容的打印机Windows. 适用 ...

  9. 打印机显示无法连接到服务器,Windows无法连接到打印机 - Windows Server | Microsoft Docs...

    尝试使用别名 CNAME 或资源记录 (连接到打印机时) 错误消息:Windows无法连接到打印机 10/15/2020 本文内容 本文提供了一个解决方案,用于解决尝试使用 CNAME 或资源记录中的 ...

最新文章

  1. python3 urllib 类
  2. GPU — CPU-GPU 异构计算系统
  3. 码位(code position/point)Unicode 编码与 Python 2/3 编码兼容性问题
  4. 关于SubSonic3.0插件使用SqlQuery或Select查询时产生的System.NullReferenceException异常修复...
  5. python空行拼接字符串_python基础---文本和字符串操作
  6. python_day6 shutil模块
  7. Github android客户端源代码分析之一:环境搭建
  8. 慎用dictionaryWithObjectsAndKeys方法
  9. 微信小程序|开发实战篇之request请求(单个、多个参数,json对象,header)
  10. HDU1555 How many days?【水题+模拟】
  11. idea 生成sdk_如何安装独立的Android SDK,然后将其添加到Windows上的IntelliJ IDEA?
  12. 嵌入式系统Linux内核开发学习指导框图
  13. OSPF Sham-Link
  14. 一键导出微信读书的书籍和笔记
  15. 【蓝桥杯单片机进阶强化-01】PCF8591的基本原理与A/D转换应用
  16. Android电源管理框架
  17. ECharts中使用tooltip时鼠标移入抖动问题
  18. Advanced COM Interop
  19. Matter理论介绍-通用-1-04:桥接器-其他功能
  20. US100超声波测距模块的FPGA驱动

热门文章

  1. 双层板在哪层覆铜_多层板的生产过程,与双层板有何不同?
  2. python关于组合数据类型_python组合数据类型
  3. kotlin 添加第一个 集合_kotlin 集合的操作
  4. h5球的立体效果_使用HTML5 Canvas 2D直角坐标系实现三维球体效果
  5. MySQL的DDL、DML、DCL、TCL什么意思?
  6. Ant Design引入Echarts
  7. 剑指offer面试题[20]-顺时针打印矩阵
  8. 计算机不能上网 检查路线,腾达(Tenda)路由器不能上网的解决方法
  9. class 原生js获取父元素_JS获取节点的兄弟,父级,子级元素的方法
  10. 功能测试工程师想快速学习新技术?7个捷径教给你!