2014-09-28 31 views
-1

因爲幾天我搜索網絡的解決方案。 我想存檔的是一個自動完成搜索框,它在最後給出了搜索到的地址或地點的經度和緯度。獲取可能的地方(地址)自動填充框Windows手機

所以here我正是我所需要的,問題是,圖像消失了,所以我卡住了。

  • 如何將文本框的內容發送到我的位置API URL(在我TextChange事件處理程序)

  • 我怎麼能看在事件處理JSON響應,並將其綁定到我的LisBox項目?

  • 最後一點,我如何獲得所選項目的經度和拉丁值,所以我可以使用它?

這裏的事件處理程序和XAML代碼

private void SearchForTerm(object sender, System.Windows.Controls.TextChangedEventArgs e) 
    { 
     //?? 
    } 

<TextBox 
     Foreground="Gray" 
     Text="Search Location" 
     TextWrapping="Wrap" 
     Margin="0,470,0,0" 
     Height="72" 
     VerticalAlignment="Top" 
     AcceptsReturn="True" 
     GotFocus="TextBox_GotFocus" 
     LostFocus="TextBox_LostFocus" 
     TextChanged="SearchForTerm" 
     /> 

<ListBox x:Name="Suggestion_listbox" 
     Margin="12,65,0,179"> 

</ListBox> 

THX了很多。

回答

2

我認爲你可以使用WPToolkit的AutoCompleteBox,這將是非常方便和易於使用。有大量的教程,這裏是。

如果你想在每個文本改變事件後得到結果,那麼你可以使用WebClient調用那個改變了文本的Web服務。我不確定那個位置API,但這裏是一個從當前天氣信息獲取的例子OpenWeatherMapAPI。你也可以使用它來獲取數據。

WebClient wc = new WebClient(); 
wc.DownloadStringCompleted+=wc_DownloadStringCompleted; 
wc.DownloadStringAsync(new Uri("http://api.openweathermap.org/data/2.5/weather?q="+location +"&units=metric",UriKind.Absolute)); 

並獲得來自Web服務的響應後,您可以使用JSON.NET反序列化JSON響應和映射JSON響應到C#類,你可以使用這個網絡工具 - json2csharp這裏是我的榜樣的DownloadStringCompleted事件處理程序。

void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
{ 
    if (!string.IsNullOrEmpty(e.Result)) 
    { 
      WeatherData weatherDt = JsonConvert.DeserializeObject<WeatherData>(e.Result); 
    } 
} 

這裏WeatherData是該Json響應的根對象。你可以使用JsonConvert.DeserializeObject(e.Result)將json響應映射到WeatherData對象;

對於DataBinding列表請參閱此question的解決方案。

而要將選定的項目作爲對象,可以使用Tap事件處理程序。

private void Suggestion_listbox_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
     ListBox list = sender as ListBox; 
     ClassName obj = list.SelectedItem as ClassName; 
} 
+0

謝謝,我認爲這會奏效。但我有一個問題:是否行: RootObject json = JsonConvert.DeserializeObject (e.Result);總是必須是RootObject?因爲我需要的地址,它是(如何說)在json響應中「更深」.. sry爲我的英語:) – Steffei 2014-09-28 19:49:19

+0

每個RootObject都必須包含對整個JSON響應及其相應類的引用對象。就像如果我想從我的示例api中獲取最高溫度,我可以從weatherDt.main.temp_max中得到它,其中weatherDt是我的RootObject。您可以像訪問這樣的對象的屬性來從RootObject獲取位置數據,或者只需將rootObject綁定到列表並使用數據綁定技術從該列表中獲取數據。 – ssakash 2014-09-29 04:28:15

+0

明白了,謝謝! – Steffei 2014-09-29 07:54:28

相關問題