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. Android 自学之进度条ProgressBar

    进度条(ProgressBar)也是UI界面中的一种非常使用的组件,通常用于向用户显示某个耗时完成的百分比.因此进度条可以动态的显示进度,因此避免长时间地执行某个耗时操作时,让用户感觉程序失去了响应, ...

  2. 配置LINUX为路由

    配置:关闭防火墙 linux1    地址1: 192.168.10.10/24 地址2:192.168.20.10/24(不指定网关,做为路由,自己就是网关) linux2    地址1: 192. ...

  3. Tinymce4 中Ajax多次加载时,会出现菜单在第二次进入时,显示的下拉菜单在左上角

    在项目中,ajax多次导入tinymce的js包 参考了: Having issues with Multiple AJAX refresh and TinyMCE load page with ti ...

  4. JAXB - XML Schema Types, Defining Subtypes

    Although object orientation isn't a key feature of XML or the XML Schema language, it's still possib ...

  5. Java - 使用 XSD 校验 XML

    package com.huey.dream.utils; import java.io.IOException; import java.io.InputStream; import javax.x ...

  6. c# json转Dictionary字典

     JavaScriptSerializer s = new JavaScriptSerializer();  string jsonTexts = "{\"count\" ...

  7. 使用 ICharpCode.SharpZipLib 压缩指定目录结构

    今天做项目中遇见一个压缩问题,我的目录结构是树形菜单,文件在服务器存储是平面存储,没有目录结构,所以在下载指定目录的时候要构建目录结构,如下: 当我右键点击下载b目录文件夹的时候要Download   ...

  8. Plugin with id 'android-apt' not found

    解决路径: 1.查看miniSDK最外面的build.gradle 添加这句.具体参考一下demo.谢谢

  9. 项目开发中常用到的SQL语句

    阅读目录 循环示例 循环示例 循环示例 循环示例 1.循环示例 在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时多少会用到一些,但突然问我,很难把自己知 ...

  10. 修改arcgis server默认js和css连接地址

    当使用ArcGIS Server 10.1发布了一个地图服务之后,在ArcGIS Server 10.1的机器上使用浏览器进入http://localhost:6080/arcgis/rest/ser ...