【WPF】MVVM实践(上)
在最近完成的一个模块项目开发中,第一次尝试使用所谓的MVVM模式进行开发。主要参考了以下几篇文章:
WPF Apps With The Model-View-ViewModel Design Pattern
Simplifying the WPF TreeView by Using the ViewModel Pattern
Introduction to Attached Behaviors in WPF
全英的,又是“新”概念,所以一开始折磨了几天都没太大的效果,而项目工期又有限,以致项目经理都建议我不要搞这玩意,速战速决了(返工吗?呃……)。最终自己顶住压力,加班加点把它应用到模块中,周末都带回家里研究,最终任务按期完成,并颇有收获。
首先来看看这个小模块的项目文件:
命名空间(包)按逻辑思路重新排列一下:
- BLL
- Model
- DataAccess
- ViewModel
- AttachBehavior
- (View)
其中DataAccess 下的类才算真正的逻辑处理操作,这里的BLL不过是做点数据库的获取、更新(就是写了一堆SQL语句)。
DataAccess 下的ReportServerRepository.cs、ReportGroupRepository.cs,以及ViewModel下的ReportServerViewModel.cs、ReportGroupViewModel.cs 、AllReportServersViewModel.cs、ReportGroupTreeViewModel.cs是几大主要“功臣”,大多数操作都由它们负责。
View层的xmal,绑定的数据源,最终都是对应到一个个xxViewModel,所以对于涉及到单个数据单位的操作——比如ReportServer时,对其进行的数据(Property)编辑、保存操作(Command),都把实现逻辑写到了xxViewModel中。而对于界面上一次性获取大批量数据绑定TreeView或ListBox控件上的,则是用ARSVM或RGTVM作为绑定源。
而可能令人感到混乱的是,View(xmal文件)的DataContext其实是RXWindowViewModel。所以其实这里套用了很多层!
下次通过分析模块中的ReportServer编辑功能,走一遍代码流程,看看MVVM是如何通过VM从V到M的操作的。。。