[Windows 8]Web訂閱的下篇
前台畫面設計完畢後,開啟【MainPage.xaml.cs】
然後定義兩個全局的變數currentFeed和currentItemIndex
currentFeed用來存放訂閱訊息
currentItemIndex用來記錄訂閱內容編號
定義完畢後,再來是"訂閱"按鈕的Subscribe_Click事件的程式碼
private async void Subscribe_Click(object sender, RoutedEventArgs e)
{
SyndicationClient client = new SyndicationClient();
client.BypassCacheOnRetrieve = true;
client.SetRequestHeader("User-Agent", "Mozolla/5.0 (compatible; MSIE 10.0; Window NT 6.2; WOW64; Trident/6.0)");
try
{
Uri uri = new Uri(Address.Text.Trim());
currentFeed = await client.RetrieveFeedAsync(uri);
DisplayFeed();
}
catch (Exception ex)
{
ShowLog.Text += "出現異常: \n\r" + ex.Message;
SyndicationErrorStatus status = SyndicationError.GetStatus(ex.HResult);
if (status == SyndicationErrorStatus.InvalidXml)
{
ShowLog.Text += "提供的XML無效";
}
}
}
上面的程式碼中,實例化了 SyndicationClient類型的 client,用來訂閱進行檢索
然後,輸入的URI位址,並把該位址作為Uri類型的參數傳入 client 對象的 RetrieveFeedAsync 方法
非同步獲取訂閱訊息
接著呼叫 DisplayFeed方法顯示訂閱內容
再來是,DisplayFeed方法的程式碼
private void DisplayFeed()
{
ShowLog.Text += "下載完成 \r\n";
ISyndicationText title = currentFeed.Title;
NewsTitle.Text = title != null ? title.Text : "(沒有標題)";
currentItemIndex = 0;
if (currentFeed.Items.Count > 0)
{
DisplayCurrentItem();
}
ShowLog.Text += "列表數目" + currentFeed.Items.Count + "\r\n";
}
上面的程式中,將全域變數的currentItemIndex賦值為 0
然後,呼叫DisplayCurrentItem方法解析訂閱
根據 currentItemIndex 的值將第一條數據顯示在前台的介面上
接著把消息的總條數顯示在 ShowLog 文字方塊上
接下來是,DisplayCurrentItem方法的程式碼:
private void DisplayCurrentItem()
{
SyndicationItem item = currentFeed.Items[currentItemIndex];
ShowIndex.Text = String.Format("{0}/{1}", currentItemIndex + 1, currentFeed.Items.Count);
NewsTitle.Text = item.Title != null ? item.Title.Text : "(沒有標題)";
string link = string.Empty;
if (item.Links.Count > 0)
{
link = item.Links[0].Uri.AbsoluteUri;
}
NewsLink.Text = link;
string content = "(沒有內容)";
if (item.Content != null)
{
content = item.Content.Text;
}
else if (item.Summary != null)
{
content = item.Summary.Text;
}
ShowContent.NavigateToString(content);
}
然後最後就是,上一條與下一條的Click事件程式碼:
private void Pre_Click(object sender, RoutedEventArgs e)
{
if (currentFeed != null && currentItemIndex > 0)
{
currentItemIndex--;
DisplayCurrentItem();
}
}
private void Next_Click(object sender, RoutedEventArgs e)
{
if (currentFeed != null && currentItemIndex < (currentFeed.Items.Count - 1))
{
currentItemIndex++;
DisplayCurrentItem();
}
}
專案執行的畫面如下:
輸入網址後,顯示的畫面如下
點擊下一條資料的畫面如下
顯示該筆資料的畫面