• BITED-Windows8应用开发学习札记之三:如何在Win8应用中实现数据绑定


      在微软官方提供的资源中,我们可以看到SampleDataSource.cs已经拥有了定义好了相应的数据结构以及实现类:

      

      建立本地数据

      由于我们已经有数据以及相应的数据类,我们需要做的仅仅是将数据放进数据类中,并在数据源的构造函数中调用它:

      首先定义一个方法,用来绑定本地数据:

    1 public SampleDataSource()
    2         {
    3             // Loca local data
    4             GetLocalFiles();
    5         }

      为了使界面运行起来不影响效果,需要通过添加async关键字来进行操作。

      其余解析均用注释的方式表示在代码中:

     1 public async Task GetLocalFiles()
     2         {
     3             string folderIndex = "Index_"; // Foler filter
     4             var Path = @"Data"; //Binding Folder
     5  
     6             var Folders = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(Path).GetResults().GetFoldersAsync();
     7             
     8             //对于每个folder分别取出
     9             foreach (var folder in Folders)
    10             {
    11                 var group = new SampleDataGroup(folder.Name, folder.Name, "", "", "");
    12                 var files = await folder.GetFilesAsync();
    13 
    14                 //对每个文件也需要分别取出
    15                 foreach (var file in files)
    16                 {
    17                     //判断文件类型是否为文本形式
    18                     if (!file.FileType.Equals(TXTFILEEXTENSION))
    19                     {
    20                         string filename = file.Name.Split(new char[] { '.' })[0];
    21 
    22                         //判断文件名是否包括_index
    23                         if (filename.Contains(folderIndex))
    24                         {
    25                             group.SetImage("/" + Path + "/" + folder.Name + "/" + file.Name);
    26                         }
    27                         else
    28                         {
    29                             var pictureItem = new SampleDataItem(filename, filename, "",
    30                                 "/" + Path + "/" + folder.Name + "/" + file.Name, "", "", group);
    31                             group.Items.Add(pictureItem);
    32                         }
    33                     }
    34                 }
    35 
    36                 //文本情况的操作
    37                 foreach (var file in files)
    38                 {
    39                     if (file.FileType.Equals(TXTFILEEXTENSION))
    40                     {
    41                         string filename = file.Name.Split(new char[] { '.' })[0];
    42                         if (filename.Contains("Index_"))
    43                         {
    44                             group.Description = await Windows.Storage.FileIO.ReadTextAsync(file);
    45                         }
    46                         else
    47                         {
    48                             var item = group.Items.First<SampleDataItem>(i => i.Title.Split(new char[] { '.' })[0] == filename);
    49                             item.Description = item.Content = await Windows.Storage.FileIO.ReadTextAsync(file);
    50                         }
    51                     }
    52                 }
    53                 //最后把所有数据绑定到AllGroups中
    54                 _sampleDataSource.AllGroups.Add(group);
    55             }
    56         }

     

      

      

      建立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()注释掉)

      微软官网给出的代码修改如下:

      1         #region GetRemote Files
      2         private async void InitAuth()
      3         {
      4             if (!Windows.ApplicationModel.DesignMode.DesignModeEnabled)
      5             {
      6                 LiveAuthClient authClient = new LiveAuthClient();
      7                 LiveLoginResult authResult = await authClient.LoginAsync(new List<string>() { "wl.signin", "wl.skydrive" });
      8                 if (authResult.Status == LiveConnectSessionStatus.Connected)
      9                 {
     10                     App.Session = authResult.Session;
     11                 }
     12                 // Forece to logout then login
     13                 authClient.Logout();
     14                 authResult = await authClient.LoginAsync(new List<string>() { "wl.signin", "wl.skydrive" });
     15                 LoadProfile();
     16             }
     17         }
     18 
     19         private async void LoadProfile()
     20         {
     21             // We may use this code later, but comment them here.
     22             //LiveConnectClient client = new LiveConnectClient(App.Session);
     23             //LiveOperationResult liveOpResult = await client.GetAsync("me");
     24             //dynamic dynResult = liveOpResult.Result;
     25             //App.UserName = dynResult.name;
     26             LoadData();
     27         }
     28 
     29         public async void LoadData()
     30         {
     31             LiveConnectClient client = new LiveConnectClient(App.Session);
     32 
     33             LiveOperationResult albumOperationResult = await client.GetAsync("me/albums");
     34             dynamic albumResult = albumOperationResult.Result;
     35             foreach (dynamic album in albumResult.data)
     36             {
     37                 if (album.name == "TravelJourney")
     38                 {
     39                     LiveOperationResult travelJourneyOperationResult = await client.GetAsync(album.id + "/files");
     40                     dynamic travelJourneyResult = travelJourneyOperationResult.Result;
     41                     foreach (dynamic subalbum in travelJourneyResult.data)
     42                     {
     43                         var group = new SampleDataGroup(subalbum.id, subalbum.name, "", @"ms-appx:///Assets/DarkGray.png", subalbum.description);
     44                         LiveOperationResult pictureOperationResult = await client.GetAsync(subalbum.id + "/files");
     45                         dynamic pictureResult = pictureOperationResult.Result;
     46 
     47                         foreach (dynamic picture in pictureResult.data)
     48                         {
     49                             if (!picture.name.EndsWith(".txt"))
     50                             {
     51                                 if (picture.name.Contains("Index_"))
     52                                 {
     53                                     group.SetImage(picture.source);
     54                                 }
     55                                 else
     56                                 {
     57                                     var pictureItem = new SampleDataItem(picture.id, picture.name, "", picture.source, picture.description, picture.description, group);
     58                                     group.Items.Add(pictureItem);
     59                                 }
     60                             }
     61                         }
     62 
     63                         foreach (dynamic picture in pictureResult.data)
     64                         {
     65                             if (picture.name.EndsWith(".txt"))
     66                             {
     67 
     68                                 string filename = picture.name.Split(new char[] { '.' })[0];
     69                                 StorageFile file = await DownLoadTxtFile(picture.id, picture.name);
     70                                 string description = await Windows.Storage.FileIO.ReadTextAsync(file);
     71                                 if (filename.Contains("Index_"))
     72                                 {
     73                                     group.Description = description;
     74                                 }
     75                                 else
     76                                 {
     77                                     var item = group.Items.First<SampleDataItem>(i => i.Title.Split(new char[] { '.' })[0] == filename);
     78                                     item.Description = item.Content = description;
     79                                 }
     80                             }
     81                         }
     82                         this.AllGroups.Add(group);
     83                     }
     84                 }
     85             }
     86         }
     87 
     88         /// <summary>
     89         /// Simply check whether file exists.
     90         /// </summary>
     91         /// <param name="fileName"></param>
     92         /// <returns></returns>
     93         async Task<bool> DoesFileExistAsync(string fileName)
     94         {
     95             try
     96             {
     97                 await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
     98                 return true;
     99             }
    100             catch
    101             {
    102                 return false;
    103             }
    104         }
    105 
    106         /// <summary>
    107         /// Download file if description file does not exist.
    108         /// </summary>
    109         /// <param name="fileid"></param>
    110         /// <param name="filename"></param>
    111         /// <returns></returns>
    112         private async Task<StorageFile> DownLoadTxtFile(string fileid, string filename)
    113         {
    114             var fileExists = await DoesFileExistAsync(filename);
    115             if (fileExists)
    116             {
    117                 return await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(filename);
    118             }
    119             else
    120             {
    121                 StorageFile file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync(filename);
    122                 LiveConnectClient client = new LiveConnectClient(App.Session);
    123                 await client.BackgroundDownloadAsync(fileid + "/content", file);
    124                 return file;
    125             }
    126         }
    127         #endregion

      本文部分内容BITED了解的也不是很深入。待进一步了解再给出更详细的经验解说。

      

      

    Copyright ©2013 BITED.All rights reserved.

  • 相关阅读:
    mybatis中refid是什么意思
    spring源码之—Assert.notNull()
    MySQL数据库查询 concat 字段合并 身份证 名字手机号脱敏 case when等
    Java 8 引入的一个很有趣的特性是 Optional 类
    <if test="distinct">distinct </if> 这样写的问题
    bit类型数据,是1=false 还是0=false
    开发用的软件
    写代码的心得
    SQL Server数据库级别触发器
    python访问aws-S3服务
  • 原文地址:https://www.cnblogs.com/bited/p/3288001.html
Copyright © 2020-2023  润新知