如何在WebClient.DownloadStringAsync URL中使用String

我目前有这个用于我的WebClient URL

WebClient Detail = new WebClient(); Detail.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Detail_DownloadStringCompleted); Detail.DownloadStringAsync(new Uri("http://api.trademe.co.nz/v1/Listings/" + ListingID.Text + ".xml")); 

我想要做的是使用这个字符串:

 void ListBoxSelectionChanged(object sender, SelectionChangedEventArgs args) { var lbi = ((sender as ListBox).SelectedItem as TradeItem); if(lbi != null) { string id = lbi.ListingId.ToString(); } } 

作为WbeClient URL的一部分。

例:

 WebClient Detail = new WebClient(); Detail.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Detail_DownloadStringCompleted); Detail.DownloadStringAsync(new Uri("http://api.trademe.co.nz/v1/Listings/" + id + ".xml")); 

无论如何在URL中使用此字符串如上所示?

完整代码#####################################

 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Phone.Controls; using System.Xml.Linq; namespace TradeMe_Panorama { public partial class MainPage : PhoneApplicationPage { // Constructor public MainPage() { InitializeComponent(); // Set the data context of the listbox control to the sample data DataContext = App.ViewModel; this.Loaded += new RoutedEventHandler(MainPage_Loaded); } // Load data for the ViewModel Items private void MainPage_Loaded(object sender, RoutedEventArgs e) { if (!App.ViewModel.IsDataLoaded) { App.ViewModel.LoadData(); } } private void button1_Click(object sender, RoutedEventArgs e) { WebClient Trademe = new WebClient(); Trademe.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Trademe_DownloadStringCompleted); Trademe.DownloadStringAsync(new Uri("http://api.trademe.co.nz/v1/Search/General.xml?search_string=" + TradeSearch.Text)); progressBar1.IsIndeterminate = true; progressBar1.Visibility = Visibility.Visible; } // Display listing for used general products ################################################################## void Trademe_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { if (e.Error != null) return; var r = XDocument.Parse(e.Result); // Declare the namespace XNamespace ns = "http://api.trademe.co.nz/v1"; TradeSearch1.ItemsSource = from TM in r.Root.Descendants(ns + "Listing").Take(20) select new TradeItem { ImageSource = TM.Element(ns + "PictureHref").Value, Title = TM.Element(ns + "Title").Value, Region = TM.Element(ns + "Region").Value, PriceDisplay = TM.Element(ns + "PriceDisplay").Value, ListingId = TM.Element(ns + "ListingId").Value, }; progressBar1.IsIndeterminate = false; progressBar1.Visibility = Visibility.Collapsed; } // Display listing for used Cars ################################################################## private void button2_Click(object sender, RoutedEventArgs e) { WebClient Motor = new WebClient(); Motor.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Motor_DownloadStringCompleted); Motor.DownloadStringAsync(new Uri("http://api.trademe.co.nz/v1/Search/Motors/Used.xml?search_string=" + MotorSearch.Text)); progressBar1.IsIndeterminate = true; progressBar1.Visibility = Visibility.Visible; } void Motor_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { if (e.Error != null) return; var r = XDocument.Parse(e.Result); // Declare the namespace XNamespace ns = "http://api.trademe.co.nz/v1"; MotorsListings.ItemsSource = from M in r.Root.Descendants(ns + "Car").Take(20) select new TradeItem { ImageSource = M.Element(ns + "PictureHref").Value, Title = M.Element(ns + "Title").Value, Region = M.Element(ns + "Region").Value, PriceDisplay = M.Element(ns + "PriceDisplay").Value, ListingId = M.Element(ns + "ListingId").Value, }; progressBar1.IsIndeterminate = false; progressBar1.Visibility = Visibility.Collapsed; } //Disaply Specfic Details of listings ######################################################################## private void button4_Click(object sender, RoutedEventArgs e) { WebClient Detail = new WebClient(); Detail.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Detail_DownloadStringCompleted); Detail.DownloadStringAsync(new Uri("http://api.trademe.co.nz/v1/Listings/" + ListingID.Text + ".xml")); progressBar1.IsIndeterminate = true; progressBar1.Visibility = Visibility.Visible; } void Detail_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { if (e.Error != null) return; var r = XDocument.Parse(e.Result); // Declare the namespace XNamespace ns = "http://api.trademe.co.nz/v1"; ListingDetails.ItemsSource = from D in r.Descendants(ns + "ListedItemDetail").Take(20) select new TradeItem { ImageSource = D.Element(ns + "Photos").Element(ns + "Photo").Element(ns + "Value").Element(ns + "Medium").Value, Title = D.Element(ns + "Title").Value, Region = D.Element(ns + "Region").Value, PriceDisplay = D.Element(ns + "Body").Value, ListingId = D.Element(ns + "ListingId").Value, CloseDate = D.Element(ns + "EndDate").Value, BuyNow = D.Element(ns + "BuyNowPrice").Value, StartPrice = D.Element(ns + "StartPrice").Value, }; progressBar1.IsIndeterminate = false; progressBar1.Visibility = Visibility.Collapsed; } public class TradeItem { public string Region { get; set; } public string ListingId { get; set; } public string PriceDisplay { get; set; } public string Title { get; set; } public string ImageSource { get; set; } public string CloseDate { get; set; } public string StartPrice { get; set; } public string BuyNow { get; set; } } // Run query string to pass LIstingID to next page } } 

它们在同一页面上吗? 如果是这样,那么您可以将id变量设置为类级变量,以便可以从类中的任何位置访问它。 或者,您可以将WebClient部分放入接受字符串的方法中。 例如:

 private void DownloadInformation(string id) { WebClient Detail = new WebClient(); Detail.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Detail_DownloadStringCompleted); Detail.DownloadStringAsync(new Uri("http://api.trademe.co.nz/v1/Listings/" + id + ".xml")); } 

然后在该ListboxSelectionChanged处理程序中,只需调用上面的方法。

 if(lbi != null) { string id = lbi.ListingId.ToString(); DownloadInformation(id); } 

作为旁注,最好在方法之外设置WebClient ,例如在Page的Loaded事件中。 这样,每次都不必创建新实例。

这是你需要做的。

 WebClient wc = new WebClient(); wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); wc.DownloadStringAsync(new Uri("http://api.trademe.co.nz/v1/Listings/" + id + ".xml")); void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { string text = e.Result; // … do something with result } 

那里你会有你的文字。