前言
本人从事机器视觉项目开发多年,一直使用WinForm来开发UI程序,近期才开始转换到WPF。WPF的华丽效果还有数据绑定等机制让我有相见恨晚之感。可是在学习WPF的过程中我走了很多弯路,首先是WPF的学习资料较少,很多的资料已经有十年左右了,和现在的开发环境存在较大差异了;其次是很少有人做桌面软件相关的技术分享了。所以我希望在这个系列博客中将我在学习过程中遇到的问题和学习过程做一个分享,帮助到其他同样想入门WPF的小伙伴。
初识Prism
我在第一次学习WPF时,用的是《深入浅出WPF》这本书,不得不说这本书对WPF的内部机制剖析的比较透彻,但很多地方其实和实际开发过程存在较大差异,对于我这种初学者来说并不能很好的理解,尤其是命令、消息路由等实现起来非常繁琐,直接将我劝退了。
后来我无意中发现了这个系列的博客,利刃 MVVMLight 1:MVVMLight介绍以及在项目中的使用 - Hello-Brand - 博客园
作者用非常详细的说明和示例演示了MVVMLight的使用方法,将绑定、命令等作了非常明了的演示,同时MVVMLight对命令、依赖属性等的封装也比原本的WPF代码简洁了许多,这时我才第一次能够使用WPF。
因为MVVMLight是一个已经停止更新的框架,所以我就找了找他的替代品,这时我才接触到了Prism。不仅有MVVMLight中的依赖属性、命令等的实现,还有更进一步的区域、模块、导航等,简直让我感到惊喜,这正是我想要的!
强烈建议新加入WPF学习的小伙伴们,在学习了XAML语法、了解了WPF的基本结构之后,一定要学习Prism!可能大大缩短你的学习时间!
我的心酸学习经历就回顾到这里,接下来我将分享一系列Prism的相关博客,其内容有很多是对《WPF-Prism8.0核心教程》WPF-Prism8.0核心教程(公益)_哔哩哔哩_bilibili的总结,感谢这位大牛的分享!(这位大牛是微软MVP!)
使用Prism
Prism可以通过安装Nuget包或者安装Prism工具来使用。我比较喜欢用Prism工具,能够省去一些对项目代码的修改,更加的方便。
1. 安装Prism工具
打开VS(我用的是VS2019),在顶部工具栏选择《扩展》-《管理扩展》
2. 创建项目
安装了扩展之后,我们就可以创建基于Prism的WPF项目了。
在创建项目的页面,我们搜索“prism”,就可以找到prism扩展为我们提供的几种项目。如下图
我们根据自己的需要选择.net core或者.net framework的项目就可以了。选择好了之后,在创建项目时,会提示我们选择容器,这里一般选择DryIoc(性能更好)。
创建好了之后直接将程序运行起来,就可以看到这样一个窗口了。
创建好的项目的结构如下图。Prism扩展为我们创建了Views和ViewModels两个文件夹。我们启动的窗口就是Views中的MainWindow.xaml,和这个窗口匹配的viewmodel文件就是ViewModels中的MainWindowViewModel.cs。
3. Prism中的binding机制
我们直接打开这个默认的MainWindow.xaml可以看到,这个默认主窗体的Title属性使用了Binding,如下图
其绑定的数据在ViewModels/MainWindowViewModel.cs,
可是我们并没有看到程序里有设置DataContext等的代码啊,那这个binding是如何实现的呢?原来秘密在xaml文件中
Prism框架能够自动的将View和ViewModel关联起来,我们所需要做的就是在Views文件夹中创建xaml文件,在ViewModels文件夹中创建ViewModel,同时,xaml文件的名称和ViewModel文件的名称的前半部分相同,viewModel文件的后半部分为“ViewModel”,框架就可以自动将这两个文件关联起来,用ViewModel作为View的数据上下文。
这个功能确实是极为方便的,但缺点就是不能在xaml文件的设计页面中直接看到关联的数据内容了,要到运行期间才能够看到。