BITED-Windows8应用开发学习札记之三:如何在Win8应用中实现数据绑定
在微软官方提供的资源中,我们可以看到SampleDataSource.cs已经拥有了定义好了相应的数据结构以及实现类:

建立本地数据
由于我们已经有数据以及相应的数据类,我们需要做的仅仅是将数据放进数据类中,并在数据源的构造函数中调用它:
首先定义一个方法,用来绑定本地数据:
public SampleDataSource()
{
// Loca local data
GetLocalFiles();
}
为了使界面运行起来不影响效果,需要通过添加async关键字来进行操作。
其余解析均用注释的方式表示在代码中:
public async Task GetLocalFiles()
{
string folderIndex = "Index_"; // Foler filter
var Path = @"Data"; //Binding Folder var Folders = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(Path).GetResults().GetFoldersAsync(); //对于每个folder分别取出
foreach (var folder in Folders)
{
var group = new SampleDataGroup(folder.Name, folder.Name, "", "", "");
var files = await folder.GetFilesAsync(); //对每个文件也需要分别取出
foreach (var file in files)
{
//判断文件类型是否为文本形式
if (!file.FileType.Equals(TXTFILEEXTENSION))
{
string filename = file.Name.Split(new char[] { '.' })[]; //判断文件名是否包括_index
if (filename.Contains(folderIndex))
{
group.SetImage("/" + Path + "/" + folder.Name + "/" + file.Name);
}
else
{
var pictureItem = new SampleDataItem(filename, filename, "",
"/" + Path + "/" + folder.Name + "/" + file.Name, "", "", group);
group.Items.Add(pictureItem);
}
}
} //文本情况的操作
foreach (var file in files)
{
if (file.FileType.Equals(TXTFILEEXTENSION))
{
string filename = file.Name.Split(new char[] { '.' })[];
if (filename.Contains("Index_"))
{
group.Description = await Windows.Storage.FileIO.ReadTextAsync(file);
}
else
{
var item = group.Items.First<SampleDataItem>(i => i.Title.Split(new char[] { '.' })[] == filename);
item.Description = item.Content = await Windows.Storage.FileIO.ReadTextAsync(file);
}
}
}
//最后把所有数据绑定到AllGroups中
_sampleDataSource.AllGroups.Add(group);
}
}
建立SKYDRIVE数据
首先,在SKYDRIVE中存入同名的文件,并在本地进行reference。同时需要注意的是:我们需要在网上下载一个LIVE SDK,具体操作如下:
- 在 http://msdn.microsoft.com/en-US/live/ff621310 页面 下载Live SDK并安装。
- 在你的工程里面引用此Live SDK。
- 进入https://manage.dev.live.com/build?wa=wsignin1.0,配置你的项目可以调用SKYDRIVE SDK,注意在STEP3中,我们只有Package Name可以填入,其他两个可以忽视
然后写代码读取数据,并在构造函数中调用InitAuth()方法(请先将GetLocalFiles()注释掉)
微软官网给出的代码修改如下:
#region GetRemote Files
private async void InitAuth()
{
if (!Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
LiveAuthClient authClient = new LiveAuthClient();
LiveLoginResult authResult = await authClient.LoginAsync(new List<string>() { "wl.signin", "wl.skydrive" });
if (authResult.Status == LiveConnectSessionStatus.Connected)
{
App.Session = authResult.Session;
}
// Forece to logout then login
authClient.Logout();
authResult = await authClient.LoginAsync(new List<string>() { "wl.signin", "wl.skydrive" });
LoadProfile();
}
} private async void LoadProfile()
{
// We may use this code later, but comment them here.
//LiveConnectClient client = new LiveConnectClient(App.Session);
//LiveOperationResult liveOpResult = await client.GetAsync("me");
//dynamic dynResult = liveOpResult.Result;
//App.UserName = dynResult.name;
LoadData();
} public async void LoadData()
{
LiveConnectClient client = new LiveConnectClient(App.Session); LiveOperationResult albumOperationResult = await client.GetAsync("me/albums");
dynamic albumResult = albumOperationResult.Result;
foreach (dynamic album in albumResult.data)
{
if (album.name == "TravelJourney")
{
LiveOperationResult travelJourneyOperationResult = await client.GetAsync(album.id + "/files");
dynamic travelJourneyResult = travelJourneyOperationResult.Result;
foreach (dynamic subalbum in travelJourneyResult.data)
{
var group = new SampleDataGroup(subalbum.id, subalbum.name, "", @"ms-appx:///Assets/DarkGray.png", subalbum.description);
LiveOperationResult pictureOperationResult = await client.GetAsync(subalbum.id + "/files");
dynamic pictureResult = pictureOperationResult.Result; foreach (dynamic picture in pictureResult.data)
{
if (!picture.name.EndsWith(".txt"))
{
if (picture.name.Contains("Index_"))
{
group.SetImage(picture.source);
}
else
{
var pictureItem = new SampleDataItem(picture.id, picture.name, "", picture.source, picture.description, picture.description, group);
group.Items.Add(pictureItem);
}
}
} foreach (dynamic picture in pictureResult.data)
{
if (picture.name.EndsWith(".txt"))
{ string filename = picture.name.Split(new char[] { '.' })[];
StorageFile file = await DownLoadTxtFile(picture.id, picture.name);
string description = await Windows.Storage.FileIO.ReadTextAsync(file);
if (filename.Contains("Index_"))
{
group.Description = description;
}
else
{
var item = group.Items.First<SampleDataItem>(i => i.Title.Split(new char[] { '.' })[] == filename);
item.Description = item.Content = description;
}
}
}
this.AllGroups.Add(group);
}
}
}
} /// <summary>
/// Simply check whether file exists.
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
async Task<bool> DoesFileExistAsync(string fileName)
{
try
{
await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
return true;
}
catch
{
return false;
}
} /// <summary>
/// Download file if description file does not exist.
/// </summary>
/// <param name="fileid"></param>
/// <param name="filename"></param>
/// <returns></returns>
private async Task<StorageFile> DownLoadTxtFile(string fileid, string filename)
{
var fileExists = await DoesFileExistAsync(filename);
if (fileExists)
{
return await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(filename);
}
else
{
StorageFile file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync(filename);
LiveConnectClient client = new LiveConnectClient(App.Session);
await client.BackgroundDownloadAsync(fileid + "/content", file);
return file;
}
}
#endregion
本文部分内容BITED了解的也不是很深入。待进一步了解再给出更详细的经验解说。
Copyright ©2013 BITED.All rights reserved.
BITED-Windows8应用开发学习札记之三:如何在Win8应用中实现数据绑定的更多相关文章
- BITED-Windows8应用开发学习札记之二:Win8应用常用视图设计
感觉自我表述能力有欠缺,技术也不够硬,所以之后的Windows8应用开发学习札记的文章就偏向于一些我认为较难的地方和重点了多有抱歉. 上节课是入门,这节课就已经开始进行视图设计了. Windows应用 ...
- BITED-Windows8应用开发学习札记之一:Win8应用开发入门
基于WinRT的Metro应用是我对Windows8的第一印象,简洁方块配以简单色调真的有沁人心脾的美感. 非常幸运,BITED在这个暑假的这个小学期里有幸学习到一门课程:软件工程基础实践,老师邀请了 ...
- BITED-Windows8应用开发学习札记之四:如何在Win8 应用中实现语义缩放
语意缩放的意义在于:创新的语意缩放外观,让你的应用随时展现信息可视化的力量.如图表般的Tile,随着数据的不同而变化,让你的页面更富节奏.而所谓的语意缩放就是通过上下文的跳转,帮助我们实现一种更快更便 ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之三---角色管理源码分享
使用Jquery+EasyUI 进行框架项目开发案例讲解之三 角色管理源码分享 在上两篇文章 <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...
- Masonry学习札记
Masnory学习札记 在之前的文章里有草草提到过Masonry自动布局,可这么重要第三方布局框架的怎么可以怎么随便带过呢!昨天在完成页面的时候刚好遇到了被Masorny功能惊叹的部分,所以趁热打铁写 ...
- Java 学习札记(三)免安装版TomCat中tomcat6w.exe的运行
1.使用环境 很多时候我们用的是官网的解压免安装版的Tomcat,相比安装Tomcat除了少了安装步骤以外还少了tomcat6w.exe运行所需要的环境变量,所以一般Java开发免安装版的已经足够使用 ...
- CAN总线学习系列之三——CAN控制器的选择
CAN总线学习系列之三——CAN控制器的选择 在进行CAN总线开发前,首先要选择好CAN总线控制器.下面就比较一些控制器的特点. 一些主要的CAN总线器件产品 制造商 产品型号 器件功能及特点 Int ...
- SQL Sever 学习系列之三
SQL Sever 学习系列之三 SQL Server 学习系列之一(薪酬方案+基础) SQL Server 学习系列之二(日期格式问题) 五.经理今天刚谈到with的用法(with的 ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
随机推荐
- SPOJ 422 Transposing is Even More Fun(polay计数)
题目链接:http://www.spoj.com/problems/TRANSP2/ 题意: 思路:不妨设a=1,b=2, 我们发现(001,010,100)组成一个置换,(011,110,101)组 ...
- 如何有效地报告 Bug
如何有效地报告 Bug 引言 为公众写过软件的人,大概都收到过很拙劣的bug(计算机程序代码中的错误或程序运行时的瑕疵--译者注)报告,例如: 在报告中说"不好用": 所报告内容毫 ...
- python中的 @ 修饰符
今天学习廖老师的python教程,碰到了修饰符'@',不太了解,查看了下官方文档. 简单的整理下: @dec2 @dec1 def func(arg1, arg2, ...): pass 等价于 de ...
- HTML发展历史
概述 HTML从1993到如今的发展,同时针对其以后的发展进行评测. HTML 语言作为网络语言标准规范,在计算机的发展史中有着不可或缺的地位.在HTML 上的成就也决定着一个时代的发展. 1.HTM ...
- 用Maven插件生成Mybatis代码
现在代码管理基本上是采用Maven管理,Maven的好处此处不多说,大家用百度搜索会有很多介绍,本文介绍一下用Maven工具如何生成Mybatis的代码及映射的文件. 一.配置Maven pom.xm ...
- CocoStudio UI 编辑器的使用
详细教程:http://www.cocoachina.com/bbs/read.php?tid=161567 Table of Contents 1 游戏中的 UI 1.1 基于 Cocos2d-x ...
- HDU 5353 Average 糖果分配(模拟,图)
题意:有n个人坐在圆桌上,每个人带着糖果若干,每次只能给旁边的人1科糖果,而且坐相邻的两个人最多只能给一次(要么你给我,要么我给你),问是否能将糖果平均分了. 思路: 明显每个人最多只能多于平均值2个 ...
- 2012年7月12 – 腾讯公司 WEB高级应用开发工程师 最新面试题 [转]
笔试(45 minute):(本来是四张纸,被我弄丢了一张!无伤大雅,难度级别不会有出入) 注意:由于时间紧迫和水平有限,难免有不足或错误,请指证,虚心学习! [PHP] 写出PHP中至少5个全局变量 ...
- HDU5427
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> us ...
- Heritrix源码分析(六) Heritrix的文件结构分析(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/642618 本博客已迁移到本人独立博客: http://www.yun5u. ...