データが存在した場合は、NewsInfoクラス型の新しいリストであるmyNewsInfoオブジェクトを作成します。 Descendantsメソッドで、全ての子孫要素内の要素を変数resultに格納しながら、以下の処理を反復します。 NewsInfoクラスのPubDateプロパティに要素の値を、titleプロパティに要素の値を、linkプロパティに<link>要素の値を指定して、AddメソッドでmyNewsInfoオブジェクトに追加していきます。<br> GridViewのItemsSourceプロパティにmyNewsInfoオブジェクトを追加します。これで、AKB48に関する「日付」と「タイトル」がタイルに表示されます。TitleTextBlockに入力した検索文字列と”動画一覧”を連結して表示します。</p>
<p>非同期処理で行われるため、メソッドの先頭にAsyncを追加します。</p>
<pre class="brush: plain; " type="syntaxhighlighter"><code class="hilightjs"> Private Async Sub MenuShow() Dim myUrl = "http://www.youtube.com/rss/tag/" &youtubeName& ".rss" Dim myHttpClient As New HttpClient Dim myResult As String = Await myHttpClient.GetStringAsync(myUrl) Dim xmldoc As XElement = XElement.Parse(myResult) Dim myMenuQuery = From c In xmldoc.Descendants("item") Select c If myMenuQuery.Count<= 0 Then TextBox1.Text = String.Empty TitleTextBlock.Text = "該当なし" GridView1.ItemsSource = Nothing Exit Sub Else Dim myPubDate As String = xmldoc.Descendants("item").Elements("pubDate").Value Dim displayDate As String = myPubDate.Substring(0, 16) TitleTextBlock.Text = youtubeName& "の動画一覧" Dim myNewsInfo As New List(Of NewsInfo) For Each result In From c In xmldoc.Descendants("item") Select c With myNewsInfo .Add(New NewsInfo With {.title = result.Element("title").Value, .link = result.Element("link").Value}) End With Next GridView1.ItemsSource = myNewsInfo End If End Sub
</code></pre>
<h4>GridViewの項目が選択された時の処理</h4>
<p>myFrameを表示状態にします。<br> 変数myYoutubeに、GridViewから選択された項目を、NewsInfoクラスにキャストして、そのlinkプロパティの値を取得して格納します。<br> 取得したmyYoutube変数を引数にAKB48Youtubeページに遷移します。</p>
<pre class="brush: plain; " type="syntaxhighlighter"><code class="hilightjs"> Private Sub GridView1_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles GridView1.SelectionChanged Try myFrame.Visibility = Windows.UI.Xaml.Visibility.Visible Dim myYoutube As String = DirectCast(GridView1.SelectedItem, NewsInfo).link myFrame.Navigate(GetType(AKB48Youtube), myYoutube) Catch Exit Sub End Try End Sub
</code></pre>
<h4>戻る(←)アイコンがクリックされた時の処理</h4>
<p>myFrameを非表示にします。</p>
<pre class="brush: plain; " type="syntaxhighlighter"><code class="hilightjs"> Private Sub backButton_Click(sender As Object, e As RoutedEventArgs) Handles backButton.Click myFrame.Visibility = Windows.UI.Xaml.Visibility.Collapsed End Sub
</code></pre>
<h4>Yesアイコンがクリックされた時の処理</h4>
<p>変数youtubeNameにTextBox1に入力された検索文字列を格納します。<br> myFrameを表示状態にします。<br> タイルにデータを表示するMenuShowプロシージャを実行します。</p>
<pre class="brush: plain; " type="syntaxhighlighter"><code class="hilightjs"> Private Sub OkButton_Click(sender As Object, e As RoutedEventArgs) Handles OkButton.Click If TextBox1.Text = String.Empty Then Exit Sub Else GridView1.SelectedIndex = -1 youtubeName = TextBox1.Text myFrame.Visibility = Windows.UI.Xaml.Visibility.Collapsed MenuShow() End If End Sub
End Class
</code></pre>
<p>次に、ソリューションエクスプローラー内のAKB48Youtube.xamlを展開して表示される、AKB48Youtube.xaml.vbをダブルクリックしてリスト4のコードを記述します。</p>
<h3>ロジックコードを記述する</h3>
<h4>リスト4 (AKB48Youtube.xaml.vb)</h4>
<pre class="brush: plain; " type="syntaxhighlighter"><code class="hilightjs">Option Strict On
Public NotInheritable Class AKB48Youtube Inherits Page
</code></pre>
<h4>ページがアクティブになった時の処理</h4>
<p>MainPage.xamlから送られた値を,e.Parameterで受け取ります。これはObject型であるため、DirectCastで文字列に変換し、変数myUriに格納します。変数myUriには下記のようなリンクが格納されます。<br> http://www.youtube.com/watch?v=Bpu4rIe1X98&feature=youtube_gdata</p>
<p>上記のリンクからYoutubeのIDを取得します。YoutubeのIDはv= Bpu4rIe1X98のv=以降の値になります。この値を取得するために、SubStringを使って取得し、変数myIDに格納します。</p>
<p>WebViewのNavigateToStringメソッドに<br> "<embed width='640' height='360' src='http://www.youtube.com/embed/" &myID& "'" & "frameborder='0' allowfullscreen></embed>"<br> と指定します。NavigateToStringメソッドは指定したHTMLコンテンツを表示するメソッドです。</p>
<pre class="brush: plain; " type="syntaxhighlighter"><code class="hilightjs"> Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs) Dim myUri As String = DirectCast(e.Parameter, String) Dim myID = myUri.Substring(31, 11) WebView1.NavigateToString("<embed width='640' height='360' src='http://www.youtube.com/embed/" &myID& "'" & "frameborder='0' allowfullscreen></embed>") End Sub
</code></pre>
<h4>ページが非アクティブになった時の処理</h4>
<p>WebViewを全ての関連付けから解放します。</p>
<pre class="brush: plain; " type="syntaxhighlighter"><code class="hilightjs"> Protected Overrides Sub OnNavigatedFrom(e As Navigation.NavigationEventArgs) WebView1 = Nothing MyBase.OnNavigatedFrom(e) End Sub
End Class
</code></pre>
<p>今回はここまでです。ありがとうございました。</p>
<p>ここで紹介したサンプルを元に作成したWindows ストアアプリが、下記のURLで公開されています。UIも多少異なっています。興味のある方は使ってみてください。<br> → <a href="http://apps.microsoft.com/windows/ja-JP/app/ddf551bc-08b4-4e29-bcff-7b7425563012" target="_blank">新版:動画一覧</a>(Windows ストア)</p>
<h3>筆者からのお知らせ</h3>
<p>筆者はWindowsストアでアプリを公開しています。チャームの検索からWindowsストアを選択して、検索欄に、kuniyasuまたはYakushijiKuniyasuと入力すると、公開されているアプリの一覧が表示されます。上記はどちらも私のアカウントですので、興味のある方は是非ダウンロードして使ってみてください。</p>