Store App 特别适用于 MVVM 模式。由于要用到 SQLite,Bing Maps,所以第一步从网上搜索并安装这两个扩展。很难想象在智能手机上运行 SQL Server 这种巨无霸型数据库,SQLite 便成为首选。运行 SQLite,需要 C++ 扩展,而解决方案属性 => 配置管理中,CPU 也不能是 Any,应改为 x86。安装后,其添加引用窗口的 扩展 项如下:

第二步,当然是下载源代码了。可到我的置顶随笔 x01.Lab.Download 中获取。解压后,双击 Lab.sln,按 F5 即可运行,效果图如下:

这是 Logon 页面。User Name 是 hello,Password 是 123,输入后点击 Logon 按钮可进入到 Reports 页面。由于有很多图片需要从网上下载,故时间比较漫长。效果图如下:

任点一项,可进入 Report Map 页面。效果图如下:

由于 Bing Maps 需要许可,所以无显示。可点击右下 Open 按钮,在屏幕右边将显示一个地图。把地图向左拉动,会产生戏剧性变化,效果图如下:

当然,还有诸如 SearchShareSetting 等超级按钮的使用,Toast 的显示等等,需要慢慢体会。此程序,来自《Programming Windows Store Apps with CSharp》一书,基本上包含了 Store App 开发的方方面面,建议购买之。该程序最大的亮点,是 MVVM 模式的使用,故重点说明一下。

虽然页面很多,但页面的代码却一致,并且少得可怜,大体如下:

using x01.Lab.StreetLib;

namespace x01.Lab.StreetApp
{
[ViewModel(typeof(ILogonPageViewModel))]
public sealed partial class LogonPage : StreetPage
{
public LogonPage()
{
this.InitializeComponent();
this.InitializeViewModel(null);
}
}
}

何以如此之少?MVVM 模式功不可没。比较有趣的是如下代码:

using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices; namespace x01.Lab.StreetLib
{
public class ModelEntity : INotifyPropertyChanged
{
private Dictionary<string, object> _Values = new Dictionary<string, object>(); public event PropertyChangedEventHandler PropertyChanged; protected T GetValue<T>([CallerMemberName] string name = null)
{
return _Values.ContainsKey(name) ? (T)_Values[name] : default(T);
} protected void SetValue(object value, [CallerMemberName] string name = null)
{
_Values[name] = value;
OnPropertyChanged(new PropertyChangedEventArgs(name));
} protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
} protected void OnPropertyChanged([CallerMemberName] string name = null)
{
OnPropertyChanged(new PropertyChangedEventArgs(name));
}
}
}

其中 【CallerMemberName】特性的使用,省了不少事。

又,TinyIoCSQLiteNewtonsoft.Json 这些 NuGet 库,也有许多值得学习和使用的地方。而 Package.appxmanifest 中功能的设置,同 Android 如出一辙。看来,这些大公司大项目,也是彼此学习的。人非生而知之,而是学而知之。“知之为知之,不知为不知,是知也。”

x01.Lab.StreetApp: MVVM的更多相关文章

  1. x01.Lab.OpenCV: 计算机视觉

    横看成岭侧成峰,计算视觉大不同.观看的角度不同,成像自然不同,这对计算机视觉来说,是个大麻烦.但计算机视觉应用如此广泛,却又有不得不研究的理由.指纹机大家都用过吧,这不过是冰山之一角.产品检测,机器人 ...

  2. x01.Lab.StoreApp: XP 停服,微软变脸

    变脸,川剧的一种表演形式,除了哄哄小孩,似乎别无用处.而川剧变脸从业者何其多也,存在时间何其长也.以如此多的从业者,如此长的时间,来进行科研,其成果一定是斐然吧.推而广之,试问天下谁能敌! 微软变脸, ...

  3. x01.os.20: compile linux-0.11 on the ubuntu

    为什么学习 linux 正如不能依靠美国的 GPS 为我们的导弹指示目标一样,很难想像用运行 windows 的电脑去同美国进行信息战.而朝鲜的网络崩溃,再次警示国人,信息战.网络战离我们并不遥远.l ...

  4. x01.os.19: linux 0.0

    linux 0.0 是一个丢失的版本,但赵炯老师又在 linux 0.11 的基础上,使它起死回生.www.oldlinux.org 有大量资源可供下载,值得一看. 1.要编译运行,首先需安装:sud ...

  5. x01.os.16: 添加功能

    准备工作  1.确保是 win xp,如是 win 8,运行 nasm 需按提示同意安装组件.  2.确保 src 和 z_tools 在同一目录下,nasm 已包含在 z_tools 文件夹中.  ...

  6. x01.os.15: 看上去很美

    张碧晨在韩国学的不是技巧,而是基本功:气息!声音由气息托着,似真声而不是真声,似假声又不是假声,所以才能在动听的地方唱得更动听.编程也是一样,基本功很重要:内存!所谓的黑客高手,攻击的一大手段,便是利 ...

  7. x01.os.14: 时间都去哪儿了

    时间都去哪儿了 老帕的“花儿为什么这样红”,三分钟引起六次欢呼,却败给了张碧晨.试想一下,如果是人气更高的陈冰,即使唱得和张碧晨一模一样,可能仍然不敌老帕,为什么张碧晨就能取胜呢?有这么个笑话:一人弹 ...

  8. x01.os.13: 文件系统

    停了两天电,忽然得空闲.找来破吉他,已然不成弦.           丁丁当当敲,敲到电来到.为把时间捡,熬夜三四点. 从我的置顶随笔 x01.Lab.Download 中下载 x01.os.12.t ...

  9. x01.os.12: 在 windows 中写 OS

    在 windows 中写操作系统,需要一系列的辅助工具.在此,要感谢川谷秀实!所有工具,都在 z_tools 文件夹中.有了大师的帮助,不妨也来尝试在 windows 中写一把 OS. 源代码及工具可 ...

随机推荐

  1. 「Ionic」使用chrom時的跨域問題

    前言:在angularjs請求數據時,會遇到跨域問題,解決辦法有很多,但是都不是我想要的(很多人云亦云,都解決不了問題).如果你只是想在本機測試使用,可以參考如下設置.   具體辦法: 1.在电脑上新 ...

  2. LoadRunner上传及下载文件

    (1)LoadRunner上传文件 web_submit_data("importStudent.do", "Action=https://testserver/cons ...

  3. GJM:用C#实现网络爬虫(一) [转载]

    网络爬虫在信息检索与处理中有很大的作用,是收集网络信息的重要工具. 接下来就介绍一下爬虫的简单实现. 爬虫的工作流程如下 爬虫自指定的URL地址开始下载网络资源,直到该地址和所有子地址的指定资源都下载 ...

  4. javascript(定时函数)

    一setTimeout函数和setInterval函数的语法以及应用 1.setTimeout函数 定义和用法:setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式. 语法:setTi ...

  5. 01Mybatis_课程安排

    课程安排: mybatis和springmvc通过订单商品 案例驱动 第一天:基础知识(重点,内容量多) 对原生态jdbc程序(单独使用jdbc开发)问题总结 mybatis框架原理   (掌握) m ...

  6. jQuery cxSlide 焦点图轮换

    cxSlide 是一个简单易用的焦点图展示插件,支持水平.纵向切换,透明过渡切换. 已支持 CSS 动画过渡切换.通过 CSS 动画切换,可以展示更多效果. 版本: jQuery v1.7+ jQue ...

  7. asp.net面试题汇总

    1.静态成员和非静态成员的区别? 答: 静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对 ...

  8. 定制Eclipse IDE之插件篇(一)

    上文回顾:定制Eclipse IDE之功能篇(二) 在这篇文章中,我会将我定制eclipse用到的其他插件罗列出来. 一.汉化插件 Eclipse本身是英文显示的,我们能够通过插件汉化.  1. 选择 ...

  9. Microsoft Dynamics CRM MVP

    MVP 一个响亮的名称, 不是 Kobe Bryant 不是 LeBron Raymone James 这是 Microsoft Dynamics CRM MVP 求证Link: http://mvp ...

  10. linux下发布的执行文件崩溃的问题定位 心得一则

    C++ Release版本发布到客户处执行时,如果程序崩溃,有什么办法能够快速的确认程序的问题呢? 如果能gdb调试的话,比较简单了,可以使用gdb命令,类似如下: gdb ##set args ** ...