[Windows 8]Web訂閱的下篇

[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();
            }
        }

 

專案執行的畫面如下:

輸入網址後,顯示的畫面如下

396

 

點擊下一條資料的畫面如下

397

 

顯示該筆資料的畫面

398