如何在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 }
那里你会有你的文字。