在微软官方提供的资源中,我们可以看到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. CF 2013-2014CTS01E04(Killer Challenge-将质因数存在 进行Bitmask)

    首先,把P进行质因数分解,每一个不用的质因数压成1位 f[i][j]表示1前i位用j“拥有”的质因数表示. 然后都懂得... #include<cstdio> #include<cs ...

  2. guice的基本使用(一)

    guice是google一个轻量级的DI注入框架,现在比较强大了,也与目前流行的struts2.jpa等都有集成了. 先看一个例子: package com.ming.user.test; publi ...

  3. Itext导出PDF,word,图片案例

    iText导出pdf.word.图片 一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生 ...

  4. ubuntu中apt-get安装与默认路径

    一.apt-get 安装 deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb或者直接双击此文件 dpkg 是Debian ...

  5. JSON 之 SuperObject(3): 访问

    测试数据提前加入 Memo1 中: 代码文件: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, ...

  6. Android实现自定义字体

    介绍 最近在看开源项目的时候,发现里面涉及到了自定义字体,虽然自己目前还用不到,但是动手demo笔记记录一下还是有必要的,没准哪天需要到这个功能. 原理 1.其实实现起来非常简单,主要是用到了Type ...

  7. 【笨嘴拙舌WINDOWS】剪切板

    Windows剪贴板是一种比较简单同时也是开销比较小的IPC(InterProcess Communication,进程间通讯)机制.Windows系统支持剪贴板IPC的基本机制是由系统预留的一块全局 ...

  8. OpenStack (1) - Keystone OpenStack Identity Service

    echo deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-updates/grizzly main >> /etc ...

  9. 最全的Android源码目录结构详解(转)

     Android 2.1|-- Makefile|-- bionic                        (bionic C库)|-- bootable                (启动 ...

  10. 20160206.CCPP体系详解(0016天)

    代码片段(01):.指针.c+02.间接赋值.c 内容概要:内存 ///01.指针 #include <stdio.h> #include <stdlib.h> //01.取地 ...