1.在首页 加入 一个元素(加下滑线的)。此元素绑定了两个属性

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>App1</title> <!-- WinJS references -->
<link href="//Microsoft.WinJS.1.0/css/ui-dark.css" rel="stylesheet" />
<script src="//Microsoft.WinJS.1.0/js/base.js"></script>
<script src="//Microsoft.WinJS.1.0/js/ui.js"></script> <!-- App1 references -->
<link href="/css/default.css" rel="stylesheet" />
<script src="/js/default.js"></script>
<script src="/js/util.js" type="text/javascript"> </script>
</head>
<body>
<div id="aa" data-win-bind="style.color:color;innerText:text" style="height: 40px; width: 100px"></div>
</body>
</html>

2.定义viewmodel, 并监听 viewmodel的属性变化。这样就可以在属性变化的时候,在更新UI的同时,去做想做的事。比如:更改本地存储。首页js 如下:

(function () {
"use strict"; WinJS.Binding.optimizeBindingReferences = true; var app = WinJS.Application;
var activation = Windows.ApplicationModel.Activation;
   WinJS.Application.onsettings = function (e) { //添加设置的选项
e.detail.applicationcommands = {// href: 是设置相关信息使用的页面 | title: 就是 设置显示的文字 | color : 对应 settings.html 内 拥有 data-win-control="WinJS.UI.SettingsFlyout" 属性的元素的id
"color": { href: "pages/settings.html", title: "更改字体颜色&内容" }
}; //把 自定义的设置选项 添加到 设置窗口
WinJS.UI.SettingsFlyout.populateSettings(e);
}; app.onactivated = function (args) {
if (args.detail.kind == activation.ActivationKind.launch) { //定义一个 ViewModel
WinJS.Namespace.define("ViewModel", {
Settings: WinJS.Binding.as({
color: "red",
text: 'aaaasdasdasdsa'
})
}); //需要观察的属性
var settings = ['color', 'text']; //给 viewmodel 绑定 属性改变事件
AddisonUitl.BindViewModelEvent(ViewModel.Settings, settings); WinJS.UI.processAll().then(function () { //绑定数据
WinJS.Binding.processAll(document.getElementById('aa'), ViewModel.Settings);
})
}
} app.start();
})();

3.因为在 添加自定义设置 选项的时候,需要一个设置页面,下面是 settings.html

<!DOCTYPE HTML>
<html>
<head>
<title></title>
<style>
#colorsDiv #backbutton {
color: #ffd800;
border-color: #ffd800;
} #colorsDiv div.win-header {
color: white;
font-weight: bolder;
background-color: #0094ff;
}
</style>
<script>
WinJS.UI.Pages.define("pages/settings.html", {
ready: function () { document.getElementById("backbutton").addEventListener("click", function () {
WinJS.UI.SettingsFlyout.show();
var bgColor = document.getElementById('bg').value,
text = document.getElementById('text2').value; //更改viewmodel的属性值,触发 viewmodel bind的事件,从而去更改 本地存储的值。
ViewModel.Settings.color = bgColor;
ViewModel.Settings.text = text;
}); }
});
</script>
</head>
<body>
<div id="color" data-win-control="WinJS.UI.SettingsFlyout">
<div class="win-header">
<button id="backbutton" class="win-backbutton"></button>
<div class="win-label">Colors</div>
</div>
<div class="win-content"> <h1>背景颜色</h1>
<input id="bg" /> <h1>更改内容</h1>
<input id="text2">
</div>
</div>
</body>
</html>

4.下面是 util.js 的代码:

WinJS.Namespace.define('AddisonUitl', {

    /// <summary> </summary>
/// <param name="name" type=""> property of ViewModel </param>
/// <param name="eventType" type=""> the key in param name </param>
BindViewModelEvent: function (name, eventType) {
var that = this;
eventType.forEach(function (item, index) { //载入 用户设置 信息
var valArray = Windows.Storage.ApplicationData.current.localSettings.values;
if (valArray[item] != undefined) {
name[item] = valArray[item];
} //绑定属性改变事件
name.bind(item, function (newVal, oldVal) { if (oldVal != null) {
that.storeSetting(item, newVal);
// that.updateViewModel(name, item, newVal);
}
})
})
}, storeSetting: function (key, value) {
var store = Windows.Storage;
store.ApplicationData.current.localSettings.values[key] = value;
}, updateViewModel: function (name, key, value) {
name[key] = value;
}
})

Windows store app Settings 的 应用 ( viewmodel + windows.storage)的更多相关文章

  1. Windows Store App 过渡动画

    Windows Store App 过渡动画     在开发Windows应用商店应用程序时,如果希望界面元素进入或者离开屏幕时显得自然和流畅,可以为其添加过渡动画.过渡动画能够及时地提示用户屏幕所发 ...

  2. 在桌面程序上和Metro/Modern/Windows store app的交互(相互打开,配置读取)

    这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情 ...

  3. Windows store app[Part 4]:深入WinRT的异步机制

    接上篇Windows store app[Part 3]:认识WinRT的异步机制 WinRT异步机制回顾: IAsyncInfo接口:WinRT下异步功能的核心,该接口提供所有异步操作的基本功能,如 ...

  4. Windows store app[Part 3]:认识WinRT的异步机制

    WinRT异步机制的诞生背景 当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,我们希望所有的交互过程都可以做出快速的反应.流畅的操作感变的十分重要. 在连接外部程序接口获取数据,操作本地数 ...

  5. windows store app search contract

    代码如下: html: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  6. windows store app Lifecycle

    1.Activated 2.Suspended 3.Resumed 4.Terminated 对应的 js代码: (function () { "use strict"; WinJ ...

  7. 05、Windows Store app 的图片裁切(更新)

    在 Win Phone Silverlight api 中,有一个 PhotoChooserTask 选择器,指定宽.高属性,在选择图片的时候, 可以进行裁切,代码: PhotoChooserTask ...

  8. 01、Windows Store APP 设置页面横竖屏的方法

    在 windows phone store app 中,判断和设置页面横竖屏的方法,与 silverlight 中的 Page 类 不同,不能直接通过 Page.Orientation 进行设置.而是 ...

  9. Windows store app[Part 1]:读取U盘数据

    Windows 8系统下开发App程序,对于.NET程序员来说,需要重新熟悉下类库. 关于WinRT,引用一张网上传的很多的结构图: 图1 针对App的开发,App工作在系统划定的安全沙箱内,所以通过 ...

随机推荐

  1. 基础:c++中引用与java中的引用

    using namespace std; class Point { public: double x; double y; Point(){} void setPoint(double x,doub ...

  2. handlebar helper帮助方法

    handlebars相对来讲算一个轻量级.高性能的模板引擎,因其简单.直观.不污染HTML的特性.另一方面,handlebars作为一个logicless的模板,不支持特别复杂的表达式.语句,只内置了 ...

  3. Genymontion安装

    Genymontion是什么 它提供的是Android的虚拟环境,和sdk的模拟器类似,能够支持windows,liunx,mac等操作系统,他比我们SDK的模拟器快很多,所以也是为什么很多开发人员会 ...

  4. bootstrap 的 datetimepicker 结束时间大于开始时间

    web的时间js控件,在管理性的项目中频繁用到,总结了一些用到的知识,分享出来,供以后学习: 1.首先引用资源包: bootstrap基础资源包: bootstrap.min.css .bootstr ...

  5. 20160504-hibernate入门

    关系型数据库与面向对象 模型不匹配(阻抗不匹配) Java面向对象语言,对象模型,其主要概念有:继承.关联.多态等:数据库是关系模型,其主要概念有:表.主键.外键等. 解决办法: 1使用JDBC手工转 ...

  6. Error:(6, 0) No such property: outputDir for class: org.gradle.api.internal.project.DefaultProject_Decorated

    在学习greenDao过程中build.gradle文件中出现这个错误,找了半天不知道为什么.代码我是在git上下载的Demo,按理说应该是没问题的.到最后发现缺少了一个关键字Def // 这样有问题 ...

  7. SQL Server调优系列进阶篇 - 深入剖析统计信息

    前言 经过前几篇的分析,其实大体已经初窥到SQL Server统计信息的重要性了,所以本篇就要祭出这个神器了. 该篇内容会很长,坐好板凳,瓜子零食之类... 不废话,进正题 技术准备 数据库版本为SQ ...

  8. WCF编程系列(二)了解WCF

    WCF编程系列(二)了解WCF   面向服务     服务是复用进化的结果,起初的复用是函数,面向对象编程的出现使复用从函数上升到对象,随后面向组件编程又将复用从对象上升到组件,现在面向服务编程将复用 ...

  9. ### CUDA

    CUDA Learning. #@author: gr #@date: 2014-04-06 #@email: forgerui@gmail.com 1. Introduction CPU和GPU的区 ...

  10. 解决:The Operation couldn't be completed.(LaunchServicesError error 0.)

    问题描述:当运行Xcode6时,编译代码成功,但是登陆模拟器失败,显示错误: The Operation couldn't be completed.(LaunchServicesError erro ...