在微软官方提供的资源中,我们可以看到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,具体操作如下:

  1. 在  http://msdn.microsoft.com/en-US/live/ff621310 页面 下载Live SDK并安装。
  2. 在你的工程里面引用此Live SDK。
  3. 进入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应用中实现数据绑定的更多相关文章

  1. BITED-Windows8应用开发学习札记之二:Win8应用常用视图设计

    感觉自我表述能力有欠缺,技术也不够硬,所以之后的Windows8应用开发学习札记的文章就偏向于一些我认为较难的地方和重点了多有抱歉. 上节课是入门,这节课就已经开始进行视图设计了. Windows应用 ...

  2. BITED-Windows8应用开发学习札记之一:Win8应用开发入门

    基于WinRT的Metro应用是我对Windows8的第一印象,简洁方块配以简单色调真的有沁人心脾的美感. 非常幸运,BITED在这个暑假的这个小学期里有幸学习到一门课程:软件工程基础实践,老师邀请了 ...

  3. BITED-Windows8应用开发学习札记之四:如何在Win8 应用中实现语义缩放

    语意缩放的意义在于:创新的语意缩放外观,让你的应用随时展现信息可视化的力量.如图表般的Tile,随着数据的不同而变化,让你的页面更富节奏.而所谓的语意缩放就是通过上下文的跳转,帮助我们实现一种更快更便 ...

  4. 使用Jquery+EasyUI 进行框架项目开发案例讲解之三---角色管理源码分享

    使用Jquery+EasyUI 进行框架项目开发案例讲解之三 角色管理源码分享    在上两篇文章  <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...

  5. Masonry学习札记

    Masnory学习札记 在之前的文章里有草草提到过Masonry自动布局,可这么重要第三方布局框架的怎么可以怎么随便带过呢!昨天在完成页面的时候刚好遇到了被Masorny功能惊叹的部分,所以趁热打铁写 ...

  6. Java 学习札记(三)免安装版TomCat中tomcat6w.exe的运行

    1.使用环境 很多时候我们用的是官网的解压免安装版的Tomcat,相比安装Tomcat除了少了安装步骤以外还少了tomcat6w.exe运行所需要的环境变量,所以一般Java开发免安装版的已经足够使用 ...

  7. CAN总线学习系列之三——CAN控制器的选择

    CAN总线学习系列之三——CAN控制器的选择 在进行CAN总线开发前,首先要选择好CAN总线控制器.下面就比较一些控制器的特点. 一些主要的CAN总线器件产品 制造商 产品型号 器件功能及特点 Int ...

  8. SQL Sever 学习系列之三

    SQL Sever 学习系列之三 SQL Server 学习系列之一(薪酬方案+基础) SQL Server 学习系列之二(日期格式问题)         五.经理今天刚谈到with的用法(with的 ...

  9. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

随机推荐

  1. hbase 学习笔记二----shell

          Hbase 是一个分布式的.面向列的开源数据库,其实现是建立在google 的bigTable 理论之上,并基于hadoop HDFS文件系统.     Hbase不同于一般的关系型数据库 ...

  2. POJ 1903 & ZOJ 2469 & UVA 1326 Jurassic Remains (部分枚举)

    题意:给定n个只有大写字母组成的字符串,选取尽可能多的字符串,使得这些字符串中每个字母的个数都是偶数.n<=24 思路:直接枚举每个字符串的选或不选,复杂度是O(2^n).其实还有更简便的方法. ...

  3. Android 的 init.rc 文件简介【转】

    转自:http://blog.csdn.net/yimiyangguang1314/article/details/6268177 init.rc由许多的Action和Service组成.每一个语句占 ...

  4. Maven+Spring+Mybatis+Security+Mysql简短的框架

    一段时间想搞个框架做开发,但是网上好多代码建立的都太杂乱.有的开源的东西我感觉用不了.本人太笨,不懂怎么上传到github上,就写在博客里,留作记录.以后用的时候也方便. 1.首先让我们看一下项目结构 ...

  5. Eclipse 修改debug当前行的颜色

    window --preferences--general--editors--text editors--annotations--debug current instruction pointer

  6. django模型中的抽象类(abstract)

    首先介绍下django的模型有哪些属性:先看例子: Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模 ...

  7. Eclipse常用的插件安装

    嫌公司用的eclipse不爽,准备自己弄一个,diy的,没想到装插得烦死人. 诱惑人的“常用插件”: (1)    AmaterasUML        介绍:Eclipse的UML插件,支持UML活 ...

  8. Windows 下搭建LDAP服务器

    五一闲来没事,加上项目正在进行UAT.抽空研究了一下LDAP相关知识.随手做一个记录. 为了方便阅读还是先介绍一下什么是LDAP? 前言.Lightweight Directory Access Pr ...

  9. HDU 1051 Wooden Sticks【LIS】

    题意:给出n个木头的重量wi,长度li,如果满足w[i+1]>=w[i]且l[i+1]>=l[i],则不用耗费另外的加工时间,问至少需要多长时间加工完这些木头. 第一次做这一题目也没有做出 ...

  10. [转] POJ字符串分类

    POJ 1002 - 487-3279(基础)http://acm.pku.edu.cn/JudgeOnline/problem?id=1002题意:略解法:二叉查找数,map,快排... POJ 1 ...