2009-06-21 13 views
0

最近、私の質問hereに答えました。 XMLをすべて解析して見栄えがよくなったので、私は過去数日にわたって私の頭を壁にぶつけていたアプリケーションについて別の質問があります。Silverlightで自動的に生成されたXMLへのハイパーリンクを追加する(C#)

XMLは、アーティスト名をリストボックスに自動的に追加するために使用されます。私がしたいことは、これらのアーティストからのAmazon検索へのリンクを提供することです。次の関数では、XMLが解析され、アーティスト名がリストに追加されます。私は何とかこのアーティスト名にハイパーリンクを付ける必要があります。誰にどのようにこれが可能であるか知っていますか?

EDIT:提供されている回答で手順2と3の接続が紛失しています。また、ナンバー3の仕組みは全く分かりません。私はSilverlightプログラミングの初心者だと認めなければならない。私の理解から、あなたはXAMLページでバインディングを行います。まだ作成されていないリストボックス項目に対してこれをどのように行うことができますか?

さらに、アマゾンのURLでアーティスト名にスペースが含まれている記号を使用していることがわかりました。それを反映するようにコードを編集しました。各アーティストの名前の下にハイパーリンクをテキストとして持つことは、私が後にすることではないことをご理解ください。 ;)

public void DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     if (e.Error == null || e.Error.Message.IndexOf("NotFound") == -1) 
     { 
      ArtistsList.Items.Clear(); 
      uname.Text = "Try Another One!"; 
      XDocument doc = XDocument.Parse(e.Result); 
      var topArtists = from results in doc.Descendants("artist") 
      select results.Element("name").Value.ToString(); 
      foreach (string artist in topArtists) 
      { 
       ArtistsList.Items.Add(artist); 

       string amazonPlus = artist.Replace(" ", "+"); 

       string amazonURL = "http://www.amazon.ca/s/ref=nb_ss_gw?url=search-alias%3Daps&field-keywords=" + amazonPlus + "&x=0&y=0"; 
       ArtistsList.Items.Add(amazonURL); 
      } 
     } 
    } 

EDIT 2は、提供の答えを明確にすることができます誰もがありますか?あなたは、XMLを解析するLINQを使用してアイテムのコレクションを作成する場合

答えて

0

1)は、名前とAmazonのURLプロパティ

2)を持つアーティストオブジェクトを作成します。

var topArtists = from result in doc.Descendants("artists") 
        select new Artist 
        { 
         Name = result.Element("name").Value, 
         Amazon = new Uri(string.format("http://amazon.com/artist={0}", result.Element("name").Value), UriKind.Absolute), 
        }; 

    ArtistList.ItemsSource = topArtists; 

3)私は、その後のTextBlock テキストまたはHyperlinkBut​​tonのコンテンツと HyperlinkButton.NavigateUrlにアマゾンのプロパティに名前をバインドするデータテンプレートを使用します。