RSSの読み込み表示とページ遷移時のパラメータの渡し方を知る

ロジックコードを記述する
リスト3 (MainWindow.xaml.vb)
Option Strict On
HTTP アプリケーション用のプログラミングインターフェイスを提供するクラスの含まれる、System.Net.Http名前空間をインポートします。
Imports System.Net.Http
DataInfoクラス内に文字列型の、「title」「description」「link」プロパティを定義しておきます。
Public Class DataInfo Property title As String Property description As String Property link As String End Class Public NotInheritable Class MainPage Inherits Page
ページがアクティブになった時の処理
HttpClientクラスの新しいインスタンスmyHttpClientオブジェクトを作成します。HttpClientクラスは、URI で識別されるリソースに HTTP 要求を送信し、そのリソースから HTTP 応答を受信するためのクラスです。
「http://www.microsoft.com/japan/msdn/rss/feed/rss.aspx」のUriで初期化された新しいUriオブジェクトmyUriを作成しておきます。このUriにRSSの情報が記載されています(RSSの構造については図4参照)。
HttpClientクラスのGetStringAsyncメソッドで、指定したURIにGET送信し、非同期操作で応答本体を文字列として受け取り、変数resultに格納します。非同期処理の場合は、メソッドの最初にAsyncを追加します。
Protected Overrides Async Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
のAsyncの部分を追加する必要があります。しかし、このAsyncの追加を忘れても、非同期処理のメソッドを使った場合、自動的にエラーが表示され、「含まれているスコープを’Async’にします」と表示され、その個所をクリックすると自動的にAsyncが頭に追加されます(図5参照)。VS2012の素晴らしい点です!
XElement.Parseメソッドで、文字列として読み込まれたXMLのRSS(図4参照)を読み取ります。
DataInfoクラス型の新しいリストである、myDataInfoオブジェクトを作成します。
読み込んだXML文書内から、Descendants メソッドで、子孫要素であるすべての
DataInfoクラスの「title」プロパティに
ListBoxのItemsSourceプロパティにmyDataInfoオブジェクトを指定します。これで、「タイトル」と「概要」がListBox内に表示されます。
Protected Overrides Async Sub OnNavigatedTo(e As Navigation.NavigationEventArgs) Dim myHttpClient As New HttpClient Dim myUri As Uri = New Uri("http://www.microsoft.com/japan/msdn/rss/feed/rss.aspx", UriKind.Absolute) Dim result = Await myHttpClient.GetStringAsync(myUri) Dim xmldoc As XElement = XElement.Parse(result) Dim myDataInfo As New List(Of DataInfo) For Each myResult In From c In xmldoc.Descendants("item") Select c With myDataInfo .Add(New DataInfo With {.title = myResult.Element("title").Value, .description = myResult.Element("description").Value, .link = myResult.Element("link").Value}) End With Next ListBox1.ItemsSource = myDataInfo End Sub
ListBox内の項目が選択された時の処理
ListBoxから選択された項目の、linkプロパティの値を変数myUrlに格納します。〔戻る〕ボタンの使用を可能にし、FameのNavigateメソッドで、myUrlを引数にWebViewPageに遷移します。
Private Sub ListBox1_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ListBox1.SelectionChanged myFrame.Visibility = Windows.UI.Xaml.Visibility.Visible Dim myUrl = DirectCast(ListBox1.SelectedItem, DataInfo).link backButton.IsEnabled = True myFrame.Navigate(GetType(WebViewPage), myUrl) End Sub
〔戻る〕ボタンがクリックされた時の処理
Frameコントロールを非表示にします。
Private Sub backButton_Click(sender As Object, e As RoutedEventArgs) Handles backButton.Click myFrame.Visibility = Windows.UI.Xaml.Visibility.Collapsed End Sub End Class
次に、ソリューションエクスプローラー内のWebViewPage.xamlを展開して表示される、WebViewPagexaml.vbをダブルクリックしてリスト4のコードを記述します。
ロジックコードを記述する
リスト4 (WebViewPage.xaml.vb)
Option Strict On Public NotInheritable Class WebViewPage Inherits Page
ページがアクティブになった時の処理
MainPage.xamlから渡された値(e.Parameter)を文字列に変換して、変数myUriに格納します。
WebViewのNavigateメソッドで変数myUriに格納されたページに遷移します。絶対URIで指定します。
Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs) Dim myUrl = CStr(e.Parameter) WebView1.Navigate(New Uri(myUrl, UriKind.Absolute)) End Sub End Class
このサンプルは「デバッグなしで開始」で実行してください。筆者の環境だけかもしれませんが、「デバッグ開始」を実行するとJust-In-Timeのエラーが発生します。Just-In-Timeのチェックを外してもエラーになりますので、「デバッグなしで開始」での実行をお願いします。
「デバッグなしで開始」では問題なく動作します。
Windows ストアアプリでRSSを読み込み表示するサンプル
ページを遷移する際にパラメータを渡すサンプル