上次被叫去面试WPF开发,让我重拾了对WPF的兴趣.国庆时候没地方耍,正好在家好好温习了下Prism库,对模块化开发,Region等有了更深的理解.节后上班居然没事做,难道看点花边新闻打发时间么?还是算了吧,太对不起程序员的身份了.楼主在公司上QQ时,总是无法显示正确的地理位置信息,因此加载不了天气预报,路上被淋过几次了,很是不方便呢.然后就考虑自己动手做一个.
功能超简单,先上几个图片:
附上解决方案目录:
说点闲话:
1.首先项目实在是太小了,最开始做的时候,本来就想直接拖控件,后来发现个问题.在显示天气数据的时候,可能有10多个文本框需要我去赋值,在后台挨个挨个手写,实在是太累了,而且最怕的就是后面哪个文本框会改动,这样维护代码是超吃力的,于是果断换成MVVM,用Binding来.
2.换成简单的MVVM吧,视图切换什么(从"默认窗口"跳转到"选择城市窗口",就涉及到视图的切换)的得写behavior或者其他什么东西来实现,实在觉得烦躁.好在Prism有个Region可以实现导航(Navigation).以前一直觉得Region很复杂,使用后才发现用起来太顺手了.
3.我想在ViewModel中实现导航,但是我无法获取IRegionManager的实例.这怎么办,难道又要写一些Behavior来实现么?还好,ViewModel可以访问一个全局的IUnityContainer,这个IUnityContainer在Bootstrapper创建Container的时候赋值,通过它可以"创造"出所有的依赖实例.那么,导航什么的就很简单了.这样也就不再是简单的MVVM,而是有了依赖注入的MVVM.
4.模块神马的实在没法说了,本来总共就2个窗口,可有可无的东西.
5.样式.这个问题纠结太久了,一直对WPF又爱又恨,就是因为WPF的开源项目太少了,美工也少,很多样式得自己写.强忍着恶心感调啊调,调成上面图中的样子了.注意,我的审美观有很大的缺陷,伤了您的眼我只能表示抱歉.
6.我们是程序员,整天纠结在哪个技术好,哪门语言吃香,实在是浪费时间的事情.不如花点时间,用自己感兴趣的技术写点自己用的小工具,又锻炼技术,又体现了价值,何乐而不为呢?
7.源码下载 这个是在VS2012下开发,VS2010 SP1环境应该能打开.