以下是我对async
MVVM 项目的推荐:
- 将您的 VM 视为具有 UI 亲和力。
- 异步方法通常用于初始化和命令。
- 属性只代表当前状态。如果您发现自己试图实现“异步属性”,请重新评估您的设计。
话虽如此,有些技巧可能对您有所帮助(所有这些都是指向我的博客或我的 AsyncEx 库的链接)。
我有一篇关于异步和构造函数的博文;“异步初始化”技术(与 IoC 兼容)是我为 VM 推荐的技术。
我还有一篇关于异步和属性的博文;有几种方法,包括异步延迟初始化(用于共享资源)和更新数据绑定属性。这两篇博文都是异步 OOP 系列的一部分,但这两篇博文尤其具有对 VM 有用的信息。
异步初始化和异步属性加载都可以使用我编写的辅助类型NotifyTaskCompletion
,它本质上只是观察一个任务并为该任务提供一些数据可绑定的属性。
对于异步命令 ( ICommand
),您可以从 开始SimpleAsyncCommand
,它类似于async
DelegateCommand
. 更高级的类型是,它支持取消、进度报告,并且只要命令已经在执行AsyncCommand
,就默认实现CanExecuteChanged
返回。false
请注意,SimpleAsyncCommand
并且AsyncCommand
还不是 AsyncEx 的一部分,因此您必须将源代码复制/粘贴到您自己的项目中才能使用它们。