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开 ...
随机推荐
- Javascript上下文
var User = { count: 1, getCount: function() { return this.count; } }; console.log(User.getCount()); ...
- HDU 4644 BWT(Burrows–Wheeler transform+KMP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4644 题意:给出一个串,按照下面的步骤得到一个新串: (1)首先将其后面增加一个美元符号: (2)将每 ...
- ASP.NET MVC3 实例(六) 增加、修改和删除操作(二)
http://www.jquery001.com/asp.net-mvc3-instance-add-update-delete2.html 上篇我们在 ASP.NET MVC3 中实现了添加操作,由 ...
- Git基础(一)
本系列内容主要介绍Git一些基本的也是最常用的命令,相信读完本系列内容后,你也差不多能够上手Git了.读完本系列,你就能初始化一个新的代码仓库,做一些适当配置:开始或停止跟踪某些文件:暂存或提交某些更 ...
- 【Scala学习笔记】第01弹——Scala安装与配置
安装Scala之前先要安装JDK(1.5以上),最好安装JDK 1.8+,安装好JDK后配置JDK的环境变量. 然后去Scala官网(http://www.scala-lang.org/downloa ...
- Python3 学习第六弹: 迭代器与生成器
1> 迭代器 迭代的意思类似递归一般,不断地对一个对象做重复的操作.来看个例子: class Fibs: def __init__(self): self.last = self.now = 1 ...
- CodeSmith datagridview属性
private void button1_Click(object sender, EventArgs e) //将数据库里的数据直接显示在datagridview1里面 { SqlConnectio ...
- 跨平台的神器RAD XE5 来啦!!!! XE5破解
什么叫真正的跨平台,DELPHI经过这么长时间的洗礼,如今走上了夸平台的开发之路.希望RAD加油! 先去下一个XE5 再去下一个破解神器 一个破解BDS.exe的神器 开始吧.为了成功破解,请先将电脑 ...
- Qt之HTTPS登录
简述 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP ...
- 如何在Windows系统中配置Mysql群集(Mysql Cluster)
Mysql群集(Cluster)简介 MySQL群集需要有一组计算机,每台计算机的角色可能是不一样的.MySQL群集中有三种节点:管理节点.数据节点和SQL节点.群集中的某计算机可 能是某一种节点,也 ...