Windows Phone “Mango”: 短いコードでRSS/Atomフィードを一覧表示する方法


さまざまなセミナーでデモしているSyndicationFeedを利用したRSS/Atomフィードの処理について、説明します。

まずは簡単に画面を作ります。MainPage.xamlにUrl入力用のTextBox (txtURI)、フィード処理実行用のButton (btnExecute)を用意しましょう。

フィード処理

さて、プロジェクトのReferences (参照)に Silverlight 4のSystem.ServiceModel.Syndicationを加えます。
32ビットOSの場合、C:\Program Files\Microsoft SDKs\Silverlight\v4.0\Libraries\Client 、
64ビットOSの場合、C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Libraries\Client に入っています。

MainPage.xaml.csにコードを加えます。

using System.ServiceModel.Syndication;
using System.IO;
using System.Text;
using System.Xml;

ボタンのクリックイベントと通信のイベントハンドラーを実装しましょう。

private void btnExecute_Click(object sender, RoutedEventArgs e)
{
    WebClient cli = new WebClient();
    Uri uri;
    if (!Uri.TryCreate(txtURI.Text, UriKind.Absolute, out uri))
    {
        MessageBox.Show("指定されたURIに間違いがあります");
        return;
    }

    cli.DownloadStringCompleted +=
        new DownloadStringCompletedEventHandler(cli_DownloadStringCompleted);
    cli.DownloadStringAsync(uri);
}

void cli_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    if (e.Error != null)
    {
        MessageBox.Show("エラー:" + e.Error.Message);
        return;
    }

    StringReader sr = new StringReader(e.Result);
    XmlReader xr = XmlReader.Create(sr);
    SyndicationFeed sf = SyndicationFeed.Load(xr);
    this.DataContext = sf;

}

赤字の4行部分が、ポイントです。RSS/Atomフィードから受け取ったXMLデータについて、SyndicationFeedクラスに処理を任せています。

さて、プロジェクトをExpression Blend で開き、UIを完成させます。ここからが重要です。

[Data]パネルで、[Create Sample Data from Class…] (クラスからのサンプルデータの作成)を選びます。

サンプルデータからのクラス作成

表示されたダイアログから、[Show all assemblies]にチェックを入れ、SyndicationFeedクラスを選択します。
[Data]パネルに、SyndicationFeedクラスが展開されます。

CreateSampleDataFromClassSyndicationFeed

[Data]パネル内のSyndicationFeedのツリーにある[Items]をドラッグ&ドロップして、TextBoxとButtonの下側に配置します。

SyndicationFeed-listbox

作成された[listBox]の大きさを整え、ItemTemplateを編集します。

listBoxテンプレート

一つ目のTextBlockに、Title.Textをドラッグ&ドロップして、バインドします。わかりやすさのために、このTextBlockのフォントの大きさや色を変えておきましょう。

WS000005

続いて、ツールパネルからTBを2回ダブルクリックして、TextBlockを2つ追加します。先ほどと同じ要領で、PublishDate.DateTimeとSummary.Textをバインドします。次のような画面になります。

WS000006

[F5]キーを押して、実行しましょう。

フィード結果

クラスからサンプルデータを作成し、UIをデザインする方法をうまく活用してください。

Skip to main content