在微软官方提供的资源中,我们可以看到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. 16_采用SharedPreferences保存用户偏好设置参数

    按钮事件 <Button android:id="@+id/button" android:layout_width="wrap_content" and ...

  2. ajax练习习题三搜索

    做一个汽车搜索页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  3. poj 1325 Machine Schedule 二分匹配,可以用最大流来做

    题目大意:机器调度问题,同一个任务可以在A,B两台不同的机器上以不同的模式完成.机器的初始模式是mode_0,但从任何模式改变成另一个模式需要重启机器.求完成所有工作所需最少重启次数. ======= ...

  4. GMT and CST

    GMT(Greenwich Mean Time) 代表格林尼治标准时间 而CST却同时可以代表如下 4 个不同的时区: Central Standard Time (USA) UT-6:00    C ...

  5. 《OD大数据实战》Kafka入门实例

    官网: 参考文档: Kafka入门经典教程 Kafka工作原理详解 一.安装zookeeper 1. 下载zookeeper-3.4.5-cdh5.3.6.tar.gz 下载地址为: http://a ...

  6. Asp.net MVC 3实例学习之ExtShop(四)——完成产品列表页

    在完成产品列表页前要做一些准备功夫.首先是去下载MvcPager用了为产品列表分页.下载的可能是基于MVC 2的,没关系,可以用在MVC 3上.如果有担心,下载源代码重新编译一次好了.下载后将DLL添 ...

  7. SQL查询时间去除非工作日...

    CREATE FUNCTION [f_WorkDayADD]( @date datetime, --基础日期 @workday int --要增加的工作日数 )RETURNS datetime AS ...

  8. R语言AMORE包实现BP神经网络——German数据集

    library(AMORE)data<-read.table('G:\\dataguru\\ML\\ML09\\基于BP网络的个人信贷信用评估\\基于BP网络的个人信贷信用评估\\german. ...

  9. [ionic开源项目教程] - 第4讲 通Service层获取数据列表

    第4讲:通Service层获取数据列表 上一讲中页面的基本架构已完成,这一讲介绍如何通过service层从服务器请求数据,在通过controller层为载体,显示到视图层. 1.在services.j ...

  10. UVa 10815 Andy's First Dictionary

    感觉这道题要比之前几个字符串处理的题目难度要大了一些. 题目大意:给若干行字符串,提取出所有单词并去掉重复的,最后按字典顺序输出. 对于输入大致有两种思路,一种是逐个读入字符,遇到字母的话就放到wor ...