1.2 学习路线与阶段验收
学习目标
这条路线把学习结果拆成五个阶段。你可以按自己的空闲时间安排,不需要为了赶进度跳过练习。每次投入 45~90 分钟,至少留出一半时间实际写代码;用“能独立完成什么”衡量进展。
学习依赖大致如下:
窗口与 XAML → 布局与控件 → 数据绑定与通知
↓
MVVM 分层 → 命令与 Toolkit
↓
资源、样式、模板 + 异步、DI、HTTP
↓
TaskDesk 实战 → 调试与发布
↓
Prism 多页面导航与模块化
阶段一:让窗口正确显示
阅读后端经验对照,再依次完成环境准备、XAML、布局和控件交互。
暂时可以用代码后置处理按钮点击。这个阶段要解决的是:窗口由哪些对象组成,控件如何获得空间,事件怎样进入 C#。如果连 Grid 的 Auto 和 * 都不清楚,直接学习完整 MVVM 框架会增加理解负担。
阶段作品: 一个任务录入窗口,顶部标题,中间输入与列表,底部按钮。窗口变宽时列表扩展,变小时仍能操作。
验收: 能不依赖设计器写出 Grid 布局;能解释 x:Class 与 InitializeComponent();能在代码后置收到点击事件;调整窗口尺寸时关键控件没有被遮挡。
阶段二:让数据变化推动界面
依次阅读DataContext 与 Binding、通知与集合、转换器与校验和属性与事件机制。
把阶段一窗口的数据抽成一个对象。输入框通过绑定修改对象,列表通过可观察集合增减条目。此时重点是建立三件事之间的关系:绑定源、绑定目标,以及变更通知。
| 实验 | 预期现象 | 要理解的机制 |
|---|---|---|
| 修改普通自动属性 | 已显示的文字可能保持原值 | 没有变更通知 |
| 触发属性通知 | 对应文字自动更新 | INotifyPropertyChanged |
| 向可观察集合添加条目 | 列表新增一行 | 集合结构通知 |
| 修改某行的标题 | 有元素通知时更新 | 元素与集合通知不同 |
| 在输入框持续输入 | 配置后每次输入写回 | UpdateSourceTrigger |
阶段作品: 任务录入窗口通过绑定工作,不用逐个控件赋值。
验收: 能说明 DataContext 的继承关系;知道绑定错误在哪里查看;能区分 TwoWay 和更新时机;列表新增和某行属性修改都能正确显示。
阶段三:组织可以维护的交互
先读 MVVM 分层和 ICommand,再读 Toolkit与导航和对话框。随后学习资源样式、模板和集合视图。
先手写一个简单命令,理解 Execute、CanExecute 和状态变化;再用工具减少重复代码。命令本身不是业务服务,ViewModel 负责决定何时调用服务,以及怎样表示结果。
阶段作品: 把录入窗口重构为 View、ViewModel 和 Service。输入为空时“新增”按钮禁用;选中任务时操作按钮启用。用资源字典统一按钮样式,用 DataTemplate 决定任务行的外观。
验收: ViewModel 不直接访问具体 TextBox;可以在不打开窗口的情况下调用命令并检查状态;能解释 DataTemplate 与 ControlTemplate 的区别;CanExecute 会随输入和选择变化。
:::tip 不必一次引入所有框架 先用 WPF 内建能力和 MVVM Toolkit 完成一个窗口。第五阶段再用 Prism 学习多页面组织,便于区分 WPF 原生机制与框架提供的能力;插件系统和自定义控件库可等到出现明确需求时继续探索。 :::
阶段四:调用 API 并完成实战
阅读异步与线程、依赖注入、HTTP 与认证,再进入TaskDesk 实战。最后用调试、测试与发布完成工程验证。
后端开发者在这个阶段往往上手很快,但必须保留桌面交互视角:请求期间能否拖动窗口?按钮重复点击会发生什么?关闭窗口时请求如何停止?超时后还能不能重试?这些都属于功能完整性。
阶段作品: 客户端调用 API,完成刷新、新增、完成、删除;请求期间表示忙碌,支持取消,网络错误能显示并恢复操作。
验收: API 停止后客户端不会直接崩溃;空输入不会提交;等待请求时窗口可响应;取消后能再发起请求;发布输出在合适的 Windows 环境可运行。
阶段五:用 Prism 组织多页面应用
依次学习 Prism 定位、启动与容器、通知与命令、Region 导航、对话框、事件聚合和模块,最后完成 PrismStudy 实战。
这个阶段把“一个窗口显示一个对象”扩展为“Shell 的区域显示页面,容器构造依赖,导航管理进入与离开,模块组织功能注册”。复用你已学的绑定与线程规则;先固定 Prism 9.0.537,再对照旧教程,避免混用不同版本的导航命名空间与对话框关闭 API。
阶段作品: 一个有任务页和设置页的客户端,支持页面复用、未保存离开确认、删除对话框、任务新增通知和模块注册。
验收: 修改设置后取消离开能留在原页;确认放弃后草稿恢复;重复切换不会重复订阅事件;导航失败能给出反馈;能解释模块初始化与 Region 可用时机的区别。完成后把 TaskDesk API 接入 Prism 的任务服务,练习统一异步、取消和容器所有权。
一周如何安排
下面是一种可调整的节奏,按内容块安排,而非承诺固定天数学完:
| 学习时段 | 阅读与操作 | 复习记录 |
|---|---|---|
| 两次 | XAML、布局、控件,完成录入窗口 | 画出控件树,记录布局问题 |
| 两到三次 | 绑定、通知、校验实验 | 重现一次不更新的绑定 |
| 两到三次 | MVVM、命令和 Toolkit 重构 | 对照手写与生成代码 |
| 两次 | 样式、模板、表格 | 区分显示数据与改变控件外观 |
| 三次以上 | 工程实践、实战联调、发布 | 记录请求、取消、错误与恢复 |
| 三次以上 | Prism 容器、导航、对话框与模块 | 画出页面进入、离开、复用和消息关系 |
遇到某个验收无法完成时,回到对应章节做最小实验。不要通过整段替换为别人的代码掩盖问题;能解释失败原因,比赶完目录更有价值。
动手练习
挑选阶段一的录入窗口,写下三个验收操作:正常尺寸输入、缩小窗口、点击按钮。每次加入一种机制后重复操作,并增加一个新验收,例如“属性改变后列表更新”。
验收: 你的学习记录包含五个阶段的作品与判断标准;每个判断标准都能通过一次具体操作确认。