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

最近写了一些 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 保存了多年来微软各种技术文档的存档,有兴趣的话你也可以在这里寻找到当年的回忆。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法题目——岛屿数量(bfs dfs)

题目链接:leetcode.200岛屿数量 dfs 重点:路过过的点做新标记 ,以防止重复路过 思路: 数据读取完成后 1.对所有数据进行一次循环 2.在循环内部,如果元素为‘1’则进入dfs算法 3.在深度优先遍历中,先将该元素标记为‘0’,在查看它的上下左右元素是否为‘1’,是‘1’则进…

注意| .NET开发者大会防疫须知 !

2020年12月19-20日中国.NET开发者大会将于苏州举办疫情常态化的情况下为确保大会顺利进行大会组委会从会议内容、会务筹备等方面均进行了全面的精细准备以下是组委会发布的参会防疫指南敬请所有现场参会的小伙伴认真阅读并严格按照防疫需求作相应准备▽为保证大会的顺利召开&am…

算法题目——省份数量(dfs,bfs)

题目链接:leetcode.547省份数量 dfs: 深度优先遍历:递归 思路:读入数据完成后 重点:建立一个数组记录该省份是否访问,新建一个元素记录省份圈的个数 1.对所有省份循环一次,如果该省份未被访问,则进入dfs 2.dfs中,对所有省份循环一遍,如果未被访问且省份index可以到达…

算法题目——杨辉三角问题

思路: #include<iostream> #include<cstdio> #include<cstring> #

了解一下HTTP1.1 Pipelining技术

为什么谈HTTP1.1 Pipelining呢&#xff1f;主要问题根源还是来源于Beetlex参加了techempower的测试。先看一下以下两项测试的结果&#xff1a;以上分别是.net平台的Json和Plaintext的测试结果&#xff0c;其实Plaintext最高能跑700多万RPS已经完全超了对网络IO读写损耗的认知&a…

算法题目——子序列和问题(poj-3061)(尺取法)

题目链接:POJ-3061 题意:给定一个序列,使得其和大于或等于S,求最短的子序列长度。 问题分析: 1.首先序列都是正整数,当子序列和大于等于S时,已经没有必要再将右端点继续向右移动。因为再向右移动,序列的长度一定会大于此时的长度 2.所以,当子序列和小于S时,右端点向…

读书 | 数字化转型的道与术(下)

【数字化转型】| 作者 / Edison Zhou这是EdisonTalk的第313篇学习总结 最近在阅读钟华老师的新作《数字化转型的道与术》&#xff0c;记录和总结了一些学习笔记和感想&#xff0c;整理成文分享与你&#xff0c;本文为下半部分&#xff0c;希望能对也在参与数字化转型的各位童鞋…

算法题目——读书知识点统计问题(POJ-3320)(尺取法)

题目链接:poj-3320 问题:杰西卡是一个非常可爱的女孩,受到许多男孩的追捧。最近她有个问题。期末考试快到了,但她几乎没花什么时间。如果她想通过考试,她必须掌握一本厚厚的教科书中包含的所有思想。那本教科书的作者和其他作者一样,对这些观点极为挑剔,因此有些观点被…

GraphQL:面对复杂类型

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述&#xff0c;使得客户端能够准确地获得它需要的数据&#xff0c;而且没有任何冗余&#xff0c;也让 API 更容易地随着时间推移而演进&#xff0c…

为什么建议学生积极参与开源项目?

喜欢就关注我们吧&#xff01;“ 你参与过开源项目吗&#xff1f;” 随着开源技术对信息产业的积极影响进一步扩大&#xff0c;越来越多的面试官将是否参与开源项目作为考核开发者能力的一项基本指标。对于求职者来说&#xff0c;参与开源能为简历增色不少 &#xff0c;增加赢得…

微服务技术栈及分享计划

前言上一篇对微服的演变、优缺点进行了概述&#xff0c;对于业务复杂项目&#xff0c;微服务算是比较合适的解决方案&#xff1b;对于咱们开发者来说&#xff0c;有好的解决方案肯定要跟进学习&#xff0c;但不能盲目追崇流行技术&#xff0c;目的还是为了解决问题。这里就把As…

PAT乙级题目——1002写出这个数

问题分析&#xff1a;1.数据比较大&#xff0c;并且输入数据时没有停顿&#xff0c;所有使用字符串来存储数据 string str""; cin>>str;2.使用字符串数组来存储每个数字的拼音 string S[10]{"ling","yi","er","san"…

Linux性能挖潜的隐藏招数:内核CPU亲和性参数调整

作者&#xff1a;李彬&#xff0c;赵雪枫&#xff0c;金融科技工程师&#xff0c;架构师社区特邀作者&#xff01;应用服务性能调优&#xff0c;是每个系统投产前都需要关注的问题&#xff0c;系统及软件层面的调优方法均有大量文章介绍&#xff0c;但在所有招数使出后&#xf…

PAT乙级——1001害死人不偿命的(3n+1)猜想(太简单)

#include<iostream> using namespace std;int main(){int n;int ans0;//记录走过的步数 cin>>n;while(n!1){if(n%20){ans;nn/2;}else{ans;n(3*n1)/2;}}cout<<ans;return 0; }

好的重构方法才能摆脱“屎山”

大家好&#xff0c;我是Z哥。最近在整理一些项目&#xff0c;所以相关的文章写的多了些。之前的相关文章有《聊聊单元测试》&#xff0c;感兴趣的话可以点击文末链接去阅读。这次整理项目的时候&#xff0c;做了比较多的codereview和重构。好久没做这么高强度了重构了&#xff…

在 Asp.Net Core 中使用 worker services

ASP.Net Core 3.0 Preview 3 新增了一个 worker services&#xff0c;那什么是 worker services 呢&#xff1f;它如同 windows服务 或者 Linux守护进程 一样的后台服务&#xff0c;在 Visual Studio 中提供了一个专门创建 worker services 的模板&#xff0c;如下图&#xff…

react全局状态管理_rxv: 在React中用Vue3的reactivity包实现状态管理。

前言React的状态管理是一个缤纷繁杂的大世界&#xff0c;光我知道的就不下数十种&#xff0c;其中有最出名immutable阵营的redux&#xff0c;有mutable阵营的mobx&#xff0c;react-easy-state&#xff0c;在hooks诞生后还有极简主义的unstated-next&#xff0c;有蚂蚁金服的大…

VS Code 变身约会利器!以码会友,轻松找到心仪的TA!

在韩老师的《Visual Studio Code 权威指南》一书中&#xff0c;我向大家推荐了许多好用的插件&#xff0c;其中也不乏许多摸鱼插件&#xff0c;刷知乎、炒股票、看电影、听音乐、追番、看小说&#xff0c;一应俱全。前不久&#xff0c;韩老师还给大家推荐过一款“小霸王”插件&…

机器学习——常用算法的总结

机器学习常用算法总结 机器学习——常用算法的总结学习方式一、监督式学习&#xff1a;1、分类2、回归补充——线性回归与逻辑回归二、非监督式学习&#xff1a;三、半监督式学习&#xff1a;四、强化学习&#xff1a;算法类似性一、回归算法&#xff1a;二、基于实例的算法三、…

机器学习——决策树学习

机器学习——决策树学习一、什么是决策树二、决策树的学习过程特征选择&#xff1a;决策树生成&#xff1a;剪枝&#xff1a;三、决策树的一个具体的实例导入数据python strip() 函数和 split() 函数的详解及实例数据处理提取到训练集中的标签给数据的每一列添加上标签&#xf…