using J0818.Common;
using J0818.Data;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Windows.Input;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// 項目頁面項目範本已記錄在 http://go.microsoft.com/fwlink/?LinkId=234233
namespace J0818
{
/// <summary>
/// 顯示項目預覽集合之頁面。 在分割應用程式中,此頁面
/// 是用來顯示及選取其中一個可用的群組。
/// </summary>
public sealed partial class ItemsPage : Page
{
private NavigationHelper navigationHelper;
private ObservableDictionary defaultViewModel = new ObservableDictionary();
/// <summary>
/// NavigationHelper 是用在每個頁面上協助巡覽及
/// 處理程序生命週期管理
/// </summary>
public NavigationHelper NavigationHelper
{
get { return this.navigationHelper; }
}
/// <summary>
/// 此項可能變更為強類型檢視模型。
/// </summary>
public ObservableDictionary DefaultViewModel
{
get { return this.defaultViewModel; }
}
public ItemsPage()
{
this.InitializeComponent();
this.navigationHelper = new NavigationHelper(this);
this.navigationHelper.LoadState += navigationHelper_LoadState;
}
/// <summary>
/// 巡覽期間以傳遞的內容填入頁面。從之前的工作階段
/// 重新建立頁面時,也會提供儲存的狀態。
/// </summary>
/// <param name="sender">
/// 事件的來源; 通常是 <see cref="Common.NavigationHelper"/>
/// </param>
/// <param name="e">提供傳遞出去之巡覽參數之事件資料
/// <see cref="Frame.Navigate(Type, Object)"/> 初始要求本頁面時及
/// 這個頁面在先前的工作階段期間保留的狀態字典
/// 工作階段。第一次瀏覽頁面時,狀態是 null。</param>
private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
// TODO: 為您的問題領域建立適合的資料模型,以取代資料範例
var sampleDataGroups = await SampleDataSource.GetGroupsAsync();
this.DefaultViewModel["Items"] = sampleDataGroups;
}
/// <summary>
/// 按一下項目時叫用。
/// </summary>
/// <param name="sender">GridView (或快照應用程式時為 ListView)
/// 顯示已按下的項目。</param>
/// <param name="e">描述已按下之項目的事件資料。</param>
void ItemView_ItemClick(object sender, ItemClickEventArgs e)
{
// 巡覽至適用的目的頁面,設定新的頁面
// 方式是透過傳遞必要資訊做為巡覽參數
var groupId = ((SampleDataGroup)e.ClickedItem).UniqueId;
this.Frame.Navigate(typeof(SplitPage), groupId);
}
#region NavigationHelper 註冊
/// 本區段中提供的方法只用來允許
/// NavigationHelper 可回應頁面的巡覽方法。
///
/// 頁面專屬邏輯應該放在事件處理常式中
/// <see cref="Common.NavigationHelper.LoadState"/>
/// 和 <see cref="Common.NavigationHelper.SaveState"/>。
/// 巡覽參數可用於 LoadState 方法
/// 除了先前的工作階段期間保留的頁面狀態。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
navigationHelper.OnNavigatedTo(e);
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
navigationHelper.OnNavigatedFrom(e);
}
#endregion
}
}
using J0818.Data;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Windows.Input;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// 項目頁面項目範本已記錄在 http://go.microsoft.com/fwlink/?LinkId=234233
namespace J0818
{
/// <summary>
/// 顯示項目預覽集合之頁面。 在分割應用程式中,此頁面
/// 是用來顯示及選取其中一個可用的群組。
/// </summary>
public sealed partial class ItemsPage : Page
{
private NavigationHelper navigationHelper;
private ObservableDictionary defaultViewModel = new ObservableDictionary();
/// <summary>
/// NavigationHelper 是用在每個頁面上協助巡覽及
/// 處理程序生命週期管理
/// </summary>
public NavigationHelper NavigationHelper
{
get { return this.navigationHelper; }
}
/// <summary>
/// 此項可能變更為強類型檢視模型。
/// </summary>
public ObservableDictionary DefaultViewModel
{
get { return this.defaultViewModel; }
}
public ItemsPage()
{
this.InitializeComponent();
this.navigationHelper = new NavigationHelper(this);
this.navigationHelper.LoadState += navigationHelper_LoadState;
}
/// <summary>
/// 巡覽期間以傳遞的內容填入頁面。從之前的工作階段
/// 重新建立頁面時,也會提供儲存的狀態。
/// </summary>
/// <param name="sender">
/// 事件的來源; 通常是 <see cref="Common.NavigationHelper"/>
/// </param>
/// <param name="e">提供傳遞出去之巡覽參數之事件資料
/// <see cref="Frame.Navigate(Type, Object)"/> 初始要求本頁面時及
/// 這個頁面在先前的工作階段期間保留的狀態字典
/// 工作階段。第一次瀏覽頁面時,狀態是 null。</param>
private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
// TODO: 為您的問題領域建立適合的資料模型,以取代資料範例
var sampleDataGroups = await SampleDataSource.GetGroupsAsync();
this.DefaultViewModel["Items"] = sampleDataGroups;
}
/// <summary>
/// 按一下項目時叫用。
/// </summary>
/// <param name="sender">GridView (或快照應用程式時為 ListView)
/// 顯示已按下的項目。</param>
/// <param name="e">描述已按下之項目的事件資料。</param>
void ItemView_ItemClick(object sender, ItemClickEventArgs e)
{
// 巡覽至適用的目的頁面,設定新的頁面
// 方式是透過傳遞必要資訊做為巡覽參數
var groupId = ((SampleDataGroup)e.ClickedItem).UniqueId;
this.Frame.Navigate(typeof(SplitPage), groupId);
}
#region NavigationHelper 註冊
/// 本區段中提供的方法只用來允許
/// NavigationHelper 可回應頁面的巡覽方法。
///
/// 頁面專屬邏輯應該放在事件處理常式中
/// <see cref="Common.NavigationHelper.LoadState"/>
/// 和 <see cref="Common.NavigationHelper.SaveState"/>。
/// 巡覽參數可用於 LoadState 方法
/// 除了先前的工作階段期間保留的頁面狀態。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
navigationHelper.OnNavigatedTo(e);
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
navigationHelper.OnNavigatedFrom(e);
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using Windows.Data.Json;
using Windows.Storage;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging;
// 這個檔案所定義的資料模型是做為強類型模型的代表範例,
// 選擇的屬性名稱與標準項目範本中的資料繫結一致。
//
// 應用程式可以使用這個模型做為起點,再往上發展,也可以完全捨棄,
// 以適合需要的內容取代。如果使用此模型,您可能可以藉由
// 第一次啟動應用程式時,透過初始化 App.xaml 後置產生之程式碼中載入工作的資料,
// 改善應用程式的回應性。
namespace J0818.Data
{
/// <summary>
/// 通用項目資料模型。
/// </summary>
public class SampleDataItem
{
public SampleDataItem(String uniqueId, String title, String subtitle, String imagePath, String description, String content)
{
this.UniqueId = uniqueId;
this.Title = title;
this.Subtitle = subtitle;
this.Description = description;
this.ImagePath = imagePath;
this.Content = content;
}
public string UniqueId { get; private set; }
public string Title { get; private set; }
public string Subtitle { get; private set; }
public string Description { get; private set; }
public string ImagePath { get; private set; }
public string Content { get; private set; }
public override string ToString()
{
return this.Title;
}
}
/// <summary>
/// 通用群組資料模型。
/// </summary>
public class SampleDataGroup
{
public SampleDataGroup(String uniqueId, String title, String subtitle, String imagePath, String description)
{
this.UniqueId = uniqueId;
this.Title = title;
this.Subtitle = subtitle;
this.Description = description;
this.ImagePath = imagePath;
this.Items = new ObservableCollection<SampleDataItem>();
}
public string UniqueId { get; private set; }
public string Title { get; private set; }
public string Subtitle { get; private set; }
public string Description { get; private set; }
public string ImagePath { get; private set; }
public ObservableCollection<SampleDataItem> Items { get; private set; }
public override string ToString()
{
return this.Title;
}
}
/// <summary>
/// 建立含讀取自靜態 json 檔案之內容的群組和項目集合。
///
/// SampleDataSource 是以讀取自靜態 json 檔案的資料進行初始化,該等資料係包含在
/// 專案。這會在設計階段和執行階段提供範例資料。
/// </summary>
public sealed class SampleDataSource
{
private static SampleDataSource _sampleDataSource = new SampleDataSource();
private ObservableCollection<SampleDataGroup> _groups = new ObservableCollection<SampleDataGroup>();
public ObservableCollection<SampleDataGroup> Groups
{
get { return this._groups; }
}
public static async Task<IEnumerable<SampleDataGroup>> GetGroupsAsync()
{
await _sampleDataSource.GetSampleDataAsync();
return _sampleDataSource.Groups;
}
public static async Task<SampleDataGroup> GetGroupAsync(string uniqueId)
{
await _sampleDataSource.GetSampleDataAsync();
// 小型資料集可接受簡單線性搜尋
var matches = _sampleDataSource.Groups.Where((group) => group.UniqueId.Equals(uniqueId));
if (matches.Count() == 1) return matches.First();
return null;
}
public static async Task<SampleDataItem> GetItemAsync(string uniqueId)
{
await _sampleDataSource.GetSampleDataAsync();
// 小型資料集可接受簡單線性搜尋
var matches = _sampleDataSource.Groups.SelectMany(group => group.Items).Where((item) => item.UniqueId.Equals(uniqueId));
if (matches.Count() == 1) return matches.First();
return null;
}
private async Task GetSampleDataAsync()
{
if (this._groups.Count != 0)
return;
Uri dataUri = new Uri("ms-appx:///DataModel/SampleData.json");
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
string jsonText = await FileIO.ReadTextAsync(file);
JsonObject jsonObject = JsonObject.Parse(jsonText);
JsonArray jsonArray = jsonObject["Groups"].GetArray();
foreach (JsonValue groupValue in jsonArray)
{
JsonObject groupObject = groupValue.GetObject();
SampleDataGroup group = new SampleDataGroup(groupObject["UniqueId"].GetString(),
groupObject["Title"].GetString(),
groupObject["Subtitle"].GetString(),
groupObject["ImagePath"].GetString(),
groupObject["Description"].GetString());
foreach (JsonValue itemValue in groupObject["Items"].GetArray())
{
JsonObject itemObject = itemValue.GetObject();
group.Items.Add(new SampleDataItem(itemObject["UniqueId"].GetString(),
itemObject["Title"].GetString(),
itemObject["Subtitle"].GetString(),
itemObject["ImagePath"].GetString(),
itemObject["Description"].GetString(),
itemObject["Content"].GetString()));
}
this.Groups.Add(group);
}
}
}
}
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using Windows.Data.Json;
using Windows.Storage;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging;
// 這個檔案所定義的資料模型是做為強類型模型的代表範例,
// 選擇的屬性名稱與標準項目範本中的資料繫結一致。
//
// 應用程式可以使用這個模型做為起點,再往上發展,也可以完全捨棄,
// 以適合需要的內容取代。如果使用此模型,您可能可以藉由
// 第一次啟動應用程式時,透過初始化 App.xaml 後置產生之程式碼中載入工作的資料,
// 改善應用程式的回應性。
namespace J0818.Data
{
/// <summary>
/// 通用項目資料模型。
/// </summary>
public class SampleDataItem
{
public SampleDataItem(String uniqueId, String title, String subtitle, String imagePath, String description, String content)
{
this.UniqueId = uniqueId;
this.Title = title;
this.Subtitle = subtitle;
this.Description = description;
this.ImagePath = imagePath;
this.Content = content;
}
public string UniqueId { get; private set; }
public string Title { get; private set; }
public string Subtitle { get; private set; }
public string Description { get; private set; }
public string ImagePath { get; private set; }
public string Content { get; private set; }
public override string ToString()
{
return this.Title;
}
}
/// <summary>
/// 通用群組資料模型。
/// </summary>
public class SampleDataGroup
{
public SampleDataGroup(String uniqueId, String title, String subtitle, String imagePath, String description)
{
this.UniqueId = uniqueId;
this.Title = title;
this.Subtitle = subtitle;
this.Description = description;
this.ImagePath = imagePath;
this.Items = new ObservableCollection<SampleDataItem>();
}
public string UniqueId { get; private set; }
public string Title { get; private set; }
public string Subtitle { get; private set; }
public string Description { get; private set; }
public string ImagePath { get; private set; }
public ObservableCollection<SampleDataItem> Items { get; private set; }
public override string ToString()
{
return this.Title;
}
}
/// <summary>
/// 建立含讀取自靜態 json 檔案之內容的群組和項目集合。
///
/// SampleDataSource 是以讀取自靜態 json 檔案的資料進行初始化,該等資料係包含在
/// 專案。這會在設計階段和執行階段提供範例資料。
/// </summary>
public sealed class SampleDataSource
{
private static SampleDataSource _sampleDataSource = new SampleDataSource();
private ObservableCollection<SampleDataGroup> _groups = new ObservableCollection<SampleDataGroup>();
public ObservableCollection<SampleDataGroup> Groups
{
get { return this._groups; }
}
public static async Task<IEnumerable<SampleDataGroup>> GetGroupsAsync()
{
await _sampleDataSource.GetSampleDataAsync();
return _sampleDataSource.Groups;
}
public static async Task<SampleDataGroup> GetGroupAsync(string uniqueId)
{
await _sampleDataSource.GetSampleDataAsync();
// 小型資料集可接受簡單線性搜尋
var matches = _sampleDataSource.Groups.Where((group) => group.UniqueId.Equals(uniqueId));
if (matches.Count() == 1) return matches.First();
return null;
}
public static async Task<SampleDataItem> GetItemAsync(string uniqueId)
{
await _sampleDataSource.GetSampleDataAsync();
// 小型資料集可接受簡單線性搜尋
var matches = _sampleDataSource.Groups.SelectMany(group => group.Items).Where((item) => item.UniqueId.Equals(uniqueId));
if (matches.Count() == 1) return matches.First();
return null;
}
private async Task GetSampleDataAsync()
{
if (this._groups.Count != 0)
return;
Uri dataUri = new Uri("ms-appx:///DataModel/SampleData.json");
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
string jsonText = await FileIO.ReadTextAsync(file);
JsonObject jsonObject = JsonObject.Parse(jsonText);
JsonArray jsonArray = jsonObject["Groups"].GetArray();
foreach (JsonValue groupValue in jsonArray)
{
JsonObject groupObject = groupValue.GetObject();
SampleDataGroup group = new SampleDataGroup(groupObject["UniqueId"].GetString(),
groupObject["Title"].GetString(),
groupObject["Subtitle"].GetString(),
groupObject["ImagePath"].GetString(),
groupObject["Description"].GetString());
foreach (JsonValue itemValue in groupObject["Items"].GetArray())
{
JsonObject itemObject = itemValue.GetObject();
group.Items.Add(new SampleDataItem(itemObject["UniqueId"].GetString(),
itemObject["Title"].GetString(),
itemObject["Subtitle"].GetString(),
itemObject["ImagePath"].GetString(),
itemObject["Description"].GetString(),
itemObject["Content"].GetString()));
}
this.Groups.Add(group);
}
}
}
}